결론부터 말하면 이것만 기억하면됨
쿠키는 포트를 구분하지 않는다. 주소만 같으면 동일하게 적용됨
같은주소인데 포트만 다른 2개의 사이트가 있다고 하자.
이러면 무슨 문제가 생기냐
예를들어
1번사이트에 로그인을 한다음에
2번사이트에 요청을 보내면
1번사이트에 로그인세션이 만료되어버린다.
처음에는 security 설정 엄청 찾아봤는데 문제는 다른곳에 있었다.
톰캣에서는 세션관리를 JSESSIONID라는 쿠키로 관리한다.
기본이름이 "JSESSIONID" 이다.
근데 쿠키는 포트를 구분하지 않고 주소를 기준으로 사용된다.
그래서 어떤상황이 생기냐
1번에서 JSESSIONID라는 쿠키로 세션을 관리하는데
2번또한 JSESSIONID라는 이름으로 되어있는 쿠키로 관리하기 때문에 2번에 요청을 보내면
JSESSIONID가 바뀐다.
그럼 1번에서는 JSESSIONID가 바뀌었기 때문에 세션이 만료된걸로 판단. 로그인이 만료되는것이다.
해결방법은 간단하다.
각각의 톰캣마다 JSESSIONID의 이름을 바꿔주면 되는것이다.
1번은 JSESSIONID_1, 2번은 JSESSIONID_2 이런식으로 하면 이름이 겹쳐서 덮어써질일이 없기 때문에 서로 세션을 따로 관리할 수 있게 된다.
그럼 어떻게 설정할까?
sessionCookieName이라는 설정을 건드려주면 된다.
여러가지 방법이 있다.
server.xml
<Context path="" sessionCookieName="JSESSIONID" crossContext="true" />
context.xml
<context sessionCookieName="JSESSIONID">
application.yml
server:
port: 8080
servlet:
session:
timeout: 120m
cookie:
name: JSESSIONID
나는 이중에서 application.yml 을 이용한 방식을 가장 추천한다. 다른설정 또한 여기서 관리하는게 좋다.
우리가 프로젝트를 하다보면 느낄 것이다.
엄청나게 적은인원으로 하는 프로젝트가 아닌이상에야
나는 아직 병아리이기 때문에 내가 tomcat을 직접 셋팅할수있는 경우가 잘 없다.
그리고 yml에 넣는게 프로젝트에 셋팅이 모여있기 때문에 다른사람이 알아보기에도 편하다.