새소식

반응형
Development

[Web] Cookie Invalid Character[32] Error 확인 및 해결

  • -
반응형

에러 내역

java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value
at org.apache.tomcat.util.http.Rfc6265CookieProcessor.validateCookieValue(Rfc6265CookieProcessor.java:160) ~[tomcat-embed-core-8.5.4.jar:8.5.4]
at org.apache.tomcat.util.http.Rfc6265CookieProcessor.generateHeader(Rfc6265CookieProcessor.java:109) ~[tomcat-embed-core-8.5.4.jar:8.5.4]

쿠키에 유효하지 않은 문자[32]가 포함되어 발생하는 에러입니다.

 

발생하는 이유 

Tomcat 8.5 이후 버전부터 새로 추가된 Cookie 규칙의 영향입니다.

semicolon (;), comma (,), equal sign (=), and space cannot be used in the cookie value

 

해결 방법

내장 톰캣 사용

@Bean
public EmbeddedServletContainerCustomizer customizer() {
    return container -> {
        if (container instanceof TomcatEmbeddedServletContainerFactory) {
            TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory) container;
            tomcat.addContextCustomizers(context -> context.setCookieProcessor(new LegacyCookieProcessor()));
        }
    };
}

Bean을 통해서 CookieProcessor를 LegacyCookieProcessor 사용하도록 수정 

 

톰캣 서버 사용

<Context>
  ... 
  <CookieProcessor className="org.apache.tomcat.util.http.LegacyCookieProcessor"/>
</Context>

${TOMCAT_HOME}/conf/context.xml 파일 수정

CookieProcessor를 LegacyCookieProcessor 사용하도록 수정 

 

URLEncoder를 통한 Encode

String encodedValue = URLEncoder.encode( valeu, "UTF-8" ) ;
Cookie cookie = new Cookie( key, encodedValue);

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.