
이 시리즈에 나오는 모든 내용은 인프런 인터넷 강의 - [ 스프링 시큐리티 - 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를 사용하면 된다.