hello world
JsessionID 스프링 부트 설정 이슈 본문
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
https://velog.io/@kwakwoohyun/%EC%9D%B4%EC%8A%88%EC%B2%98%EB%A6%AC-spring-boot-local-cookie
'WEB > error_log' 카테고리의 다른 글
자바 \백슬래시 역슬래시 오류.. / 치환 (1) | 2022.11.24 |
---|---|
cors (Cross Origin Resource Sharing) 오류 (0) | 2022.07.14 |
log4j 보안이슈 해결 (0) | 2021.12.14 |
젠킨스 permission denined 오류 (0) | 2021.12.14 |
자바 Unrecognized field.. not marked as ignorable (1) | 2021.08.31 |