본문 바로가기

카테고리 없음

[스프링 시큐리티] 기본 API & Filter 이해(7) 동시 세션 제어

동일한 계정으로 인증을 받을 때 생성되는 세션의 허용 개수가 초과되었을 경우에

어떻게 세션을 초과하지 않고 계속 유지할 수 있을 지에 대한 제어이다.

스프링 시큐리티에서는 2가지 정책을 제공한다.

가정 : 최대 세션 허용 개수(1개)를 초과했다.

  1. 이전 사용자의 세션을 만료 시킨다.

사용자 1이 로그인하면 사용자 1의 세션이 서버에 생성된다.

사용자 2가 로그인하면 사용자 2의 세션이 서버에 생성된다.

그럼 서버에는 동일한 계정으로 2개의 세션이 생성된다.

→ 최대 세션 허용 개수(1개)를 초과했다.

전략에 따르면,

사용자 2가 로그인하여 세션이 생성이 되면 이전 사용자의 세션을 만료시킨다.

사용자 1이 다른 자원에 접근하려고 하면 세션이 만료되었기 때문에 사용자 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") // 세션이 만료될 경우 이동할 페이지
}