hello world

JsessionID 스프링 부트 설정 이슈 본문

WEB/error_log

JsessionID 스프링 부트 설정 이슈

sohyun_92 2022. 6. 12. 17:08
728x90

1. JsessionID 란? 

톰캣 컨테이너에서 세션을 유지하기 위해 발급하는 키 

즉 세션에서 사용되는 쿠키 이름이다.

 

HTTP 프로토콜은 상태정보를 유지하지 않는다.

즉 사용자는 매번 서버에 요청을 할때마다 응답을 받는 순간 연결을 끊어버리고 

서버의 입장에서는 요청하는 사용자가 누구인지 알지못한다.

따라서 톰캣은 JsessionID 쿠키를 클라이언트에 발급하고 이값을 통해 세션을 유지할수있게한다.

 

 

2.동작방식

1. 브라우저에 최초로 접근할때 톰캣이 Response 헤더에 JsessionID 값을 발급한다.

 

Set-Cookie: JSESSIONID=5D1A61E0BE1A9A7DE71239D6DF0331EAE

 

2. 브라우저 재요청시 Response를 통해 받은 JsessionID을 Request 헤더의 쿠키 값에 넣어 서버에 재요청한다. 

쿠키를 통해 JsessionID를 받으면 서버는 새로운 JsessionID 값을 Response 헤더에 발급하지않는다.

 

3. 클라이언트로부터 전달받은 JsessionID값을 기준으로 서버에서는 세션메모리 영역에 상태를 유지할 값들을

저장할 수 있게된다. 

 

 

* 유지범위는 동일한 Full 도메인(서브 도메인이 다를 경우 쿠기 유지되지않음)

 

 

 

이슈 

Spring boot 로 구축한 프로젝트 서버 배포중 타 도메인 서버로 접근시 cookie가 set되지 않는 현상이 발생

 


chrome80 버전 부터

기본 cookie 특성 설정이 SameSite=None 에서 Samesite=Lax가 도입되었고,

이에 따라 타 도메인을 통할 경우 브라우저에서 쿠키값을 서버로 전달하지 않을 수 있다고 한다.

 

SameSite 

 : Cokie의 SameSite 속성은 서로 다른 도메인간의 쿠키 전송에 대한 보안을 설정한다.

 

yml.xml 

 

sever:

   servlet:

      session:

         cookie:

            same-site:"none"

            secure:true

 

위와 같이 "None"동일 사이트, 크로스사이트에 모두 쿠키 전송 가능합니다.

"Strict"로 설정할 경우 서로 다른 도메인에서는 아예 전송이 불가능해짐 CSRF를 백프로 방지할수있으나 사용자의

편의성을 해침

 

* 주의할 점은 SameSite 속성을 None으로 설정할 경우 Secure 속성을 함께 추가해야합니다.

Secure 속성이 추가된 쿠키는 htttps 프로토콜에서만 전송이 가능합니다.

 

secure 

https 일때만 쿠키를 전송하는 플래그 

 

 

참고사이트

 

https://ifuwanna.tistory.com/223

 

Cookie SameSite 설정하기 (Chrome 80 쿠키 이슈)

20년 2월 4일 릴리즈된 구글 크롬(Google Chrome)80버전부터 새로운 쿠키 정책이 적용 되어 Cookie의  SameSite 속성의 기본값이 "None"에서 "Lax"로 변경되었습니다. SameSite 를 None 으로 설정할 경우 모..

ifuwanna.tistory.com

https://velog.io/@kwakwoohyun/%EC%9D%B4%EC%8A%88%EC%B2%98%EB%A6%AC-spring-boot-local-cookie

 

[Cookie] spring boot chrome 80 정책

Spring boot + security + jwt token을 사용하여 Auth 서버를 구축하는 중에 프론트와 상의하여 jwt token을 cookie로 response를 해주기로 하였다. local 환경에서 개발을 마치고 postman으로 확인한 결과 쿠키가 잘

velog.io

 

Comments