이 시리즈에 나오는 모든 내용은 인프런 인터넷 강의 - [ 스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security ] - 에서 기반된 것입니다. 그리고 여기서 인용되는 PPT 이미지 또한 모두 해당 강의에서 가져왔음을 알립니다.
한명의 사용자를 위한 최대 세션의 개수를 어떻게 제어할 때 필요한 개념이다.
쉽게 얘기해서 중복 로그인에 대한 처리를 위한 것이다.
스프링 시큐리티에서는 이러한 동시 세션 제어를 2가지 방식으로 지원한다.
1. 이전 사용자 세션 만료 방식
사용자1
가 로그인사용자2
가 같은 아이디로 로그인2. 현재 사용자 인증 실패 방식
사용자1
가 로그인사용자2
가 같은 아이디로 로그인API로 설정을 해보고, 실제 동작하는 필터 코드를 확인해보자.
// 동시 세션 제어
http.sessionManagement()
//.invalidSessionUrl("/invalid") // 세션 유요하지 않을 때 이동할 페이지
.maximumSessions(1)
.maxSessionsPreventsLogin(true) // 현재 사용자 인증 실패 방식 설정
// ** (false : 이전 사용자 세션 만료 / true : 현재 사용자 인증 실패) **
// .expiredUrl("/expired") // 세션이 만료된 경우 이동할 페이지
// invalidSessionUrl 과 expiredUrl 둘 다 설정된 경우
// invalidSessionUrl 이 우선순위를 갖는다고 함...
;
이런 일을 방지하기 위해서 사용자가 로그인을 하면 WebApp 에서 새로운 세션 아이디를
제공하는 것을 우리는 세션 고정보호라고 한다.
http.sessionManagement()
.sessionFixation()
.changeSessionId();
// .migrateSession()
// .newSession()
// .none()
JWT
로만 인증을 하는 경우라면SessionCreateionPolicy.Stateless
를 사용하면 된다.