스프링부트(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
'Programming > Java,Spring' 카테고리의 다른 글
[ Spring boot ] 스프링부트(Springboot) jsp파일 수정하고 웹에 바로 반영하기 (0) | 2018.01.30 |
---|---|
[ Spring ] 다른 도메인 내부에 쿠키 생성하기 (이게 가능해???) (1) | 2018.01.24 |
[ Spring ] debug모드 실행시 unknown host 에러발생 (0) | 2017.12.26 |
[ JAVA ] java.sql.SQLException: Before start of result set 오류 처리 (1) | 2017.10.26 |
[ Spring ] 스프링(Spring) @ControllerAdvice 예외처리시 우선순위? (0) | 2017.10.05 |