반응형

스프링부트(Springboot) 사용시 java.lang.IllegalArgumentException: An invalid domain Error 해결하기


스프링에서 쿠키에 setDomain을 할 경우 현재 서버의 도메인 및 상위 도메인 외에 다른 도메인을 셋팅하게 되면 에러가 발생한다.


서버 도메인이 test.com인데 다음과 같이 쿠키에 setDomain을 하게되면


cookie.setDomain(".toast.com");


다음과 같은 에러가 발생한다.


java.lang.IllegalArgumentException: An invalid domain [.toast.com] was specified for this cookie

at org.apache.tomcat.util.http.Rfc6265CookieProcessor.validateDomain(Rfc6265CookieProcessor.java:183)

at org.apache.tomcat.util.http.Rfc6265CookieProcessor.generateHeader(Rfc6265CookieProcessor.java:125)

at org.apache.catalina.connector.Response.generateCookieString(Response.java:989)

at org.apache.catalina.connector.Response.addCookie(Response.java:937)

at org.apache.catalina.connector.ResponseFacade.addCookie(ResponseFacade.java:386)

at com.nhnent.demonaid.cms.CookieMatchingServiceController.getAdRequestFromMedia(CookieMatchingServiceController.java:80)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:220)

.

.

.



[ 원인 ] 


tomcat8 버전 이상에서는 Cookie Header를 파싱하는 기본 CookieProcessor가 RFC6265를 기반으로 하고 다음과 같은 속성을 같는다.

5.2.3.  The Domain Attribute

   If the attribute-name case-insensitively matches the string "Domain",
   the user agent MUST process the cookie-av as follows.

   If the attribute-value is empty, the behavior is undefined.  However,
   the user agent SHOULD ignore the cookie-av entirely.

   If the first character of the attribute-value string is %x2E ("."):

      Let cookie-domain be the attribute-value without the leading %x2E
      (".") character.

   Otherwise:

      Let cookie-domain be the entire attribute-value.

   Convert the cookie-domain to lower case.

   Append an attribute to the cookie-attribute-list with an attribute-
   name of Domain and an attribute-value of cookie-domain.


Domain값 맨 앞자리에 "."을 붙일 경우 "."을 제거하고 파싱하게 된다.


[ 해결 ]

SpringBoot를 사용하고 있는 경우(Embedded Tomcat) 다음과 같은 설정을 해주면 된다. 스프링부트 자바 config클래스에 넣어주면 된다.




[ reference ]

https://jistol.github.io/java/2017/08/30/tomcat8-invalid-domain/

http://hyunc87.tistory.com/34

반응형

+ Recent posts