들어가며
프론트 도메인인 www.ticket-auctoin.kro.kr 과 서버 도메인인 api.ticket-auction.kro.kr 간 쿠키를 교환하는데
쿠키를 받지못하는 문제가 발생했다. 해당 이유는 서버에서 cookie를 set할 때, 도메인을 따로 설정해주지 않아
서버 도메인경로로 setting이 되서 그렇다.
문제
그래서 cookie를 세팅할 때, 모든 서브도메인끼리 쿠키를 공유할 수 있도록 .ticket-auction.kro.kr 로 세팅하여 보냈다.
도메인을 세팅하고 테스트를 해보니 쿠키에서 다음과 같은 에러가 발생했다.
ava.lang.IllegalArgumentException: An invalid domain [.ticket-auction.kro.kr] was specified for this cookie
at org.apache.tomcat.util.http.Rfc6265CookieProcessor.validateDomain(Rfc6265CookieProcessor.java:239) ~[tomcat-embed-core-10.1.17.jar!/:na]
at org.apache.tomcat.util.http.Rfc6265CookieProcessor.generateHeader(Rfc6265CookieProcessor.java:146) ~[tomcat-embed-core-10.1.17.jar!/:na]
at org.apache.catalina.connector.Response.generateCookieString(Response.java:947) ~[tomcat-embed-core-10.1.17.jar!/:na]
원인
tomcat 8버전 이상에서는 Cookie Header를 파싱하는 기본 CookieProcessor가 RFC6265를 기반으로 되어있다. (org.apache.tomcat.util.http.Rfc6265CookieProcessor)
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값 맨 앞자리에 “.”을 붙일 경우 “.”을 제거하고 파싱하게 된다.
해결
아래의 빈을 설정하여 등록해주면 된다.
@Bean
public EmbeddedServletContainerCustomizer tomcatCustomizer() {
return container -> {
if (container instanceof TomcatEmbeddedServletContainerFactory) {
TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory) container;
tomcat.addContextCustomizers(context -> context.setCookieProcessor(new LegacyCookieProcessor()));
}
};
}
Refrence
https://jistol.github.io/java/2017/08/30/tomcat8-invalid-domain/
https://tomcat.apache.org/tomcat-8.5-doc/config/cookie-processor.html
728x90
'프로그래밍 > Spring' 카테고리의 다른 글
[Spring] ObjectMapper 직렬화 시 한글문자 ??? 문제 (0) | 2023.11.17 |
---|---|
[Spring] ObjectMapper - LocalDateTime 직렬화 문제 (0) | 2023.11.17 |
[Spring] 스프링(Spring)이란? (2) | 2023.11.14 |
[Spring] 유효성 검증 - Validation (0) | 2023.11.13 |
[Spring] REST API 테스트 코드 작성하기 (0) | 2023.11.06 |