동일한 계정으로 인증을 받을 때 생성되는 세션의 허용 개수가 초과되었을 경우에
어떻게 세션을 초과하지 않고 계속 유지할 수 있을 지에 대한 제어이다.
스프링 시큐리티에서는 2가지 정책을 제공한다.
가정 : 최대 세션 허용 개수(1개)를 초과했다.
- 이전 사용자의 세션을 만료 시킨다.
사용자 1이 로그인하면 사용자 1의 세션이 서버에 생성된다.
사용자 2가 로그인하면 사용자 2의 세션이 서버에 생성된다.
그럼 서버에는 동일한 계정으로 2개의 세션이 생성된다.
→ 최대 세션 허용 개수(1개)를 초과했다.
전략에 따르면,
사용자 2가 로그인하여 세션이 생성이 되면 이전 사용자의 세션을 만료시킨다.
사용자 1이 다른 자원에 접근하려고 하면 세션이 만료되었기 때문에 사용자 1의 세션을 실제로 만료시켜 최대 세션 개수를 유지시킨다.
- 현재 사용자 인증 실패시킨다.
사용자 1이 로그인하여 1의 세션이 서버에 생성된다.
사용자 2가 동일한 계정으로 로그인하면
서버는 사용자 2를 인증 실패하도록 예외를 발생시킨다.
어떤 api 가 제공할까?
protected void configure(HttpSecurity http) throws Exception {
http.sessionManagement() // 세션 관리 기능이 작동한다.
.maximumSessions(1) // 최대 허용 가능 세션 수, -1 이면 무제한 로그인 세션 허용
.maxSessionsPreventsLogin(true) // 동시 로그인 차단(정책2), false 이면 기존 세션 만료(정책1)
.invalidSessionUrl("/invalid") // 세션이 유효하지 않을 때 이동할 페이지
.expireUrl("/expired") // 세션이 만료될 경우 이동할 페이지
}