개요
- 동시 세션 제어는 사용자가 동시에 여러 세션을 생성하는 것을 관리하는 전략
- 하나의 계정을 가지고 3명의 사용자가 서버에 인증을 받게 되면 3개의 세션이 생김 → 동시적 세션
- 이 전략은 사용자의 인증 후에 활성화된 세션의 수가 설정된 maximumSessions 값과 비교하여 제어 여부를 결정
동시 세션 제어 2가지 유형
- 사용자 세션 강제 만료
- 새로운 클라이언트가 접속 시 최대 허용 개수를 초과되었다면 가장 오래된 클라이언트의 세션을 강제로 만료
- 사용자 인증 시도 차단
- 최대 허용 개수 초과 시 인증 예외가 발생하여 로그인 자체를 실패
- 사용자 세션 강제 만료 ⇒ 세션 개수 초과 시 가장 오래된 사용자의 세션을 만료
- 사용자 인증 시도 차단 ⇒ 세션 개수 초과 시 로그인 불가(인증 시도 차단)
sessionManagement() API - 동시 세션 제어
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.sessionManagement(session -> session
.invalidSessionUrl("/invalidSessionUrl")
.maximumSessions(1)
.maxSessionsPreventsLogin(true)
.expiredUrl("/expired")
);
return http.build();
}
메서드 | 설명 |
invalidSessionUrl(경로) | 이미 만료된 세션으로 요청을 하는 사용자를 특정 엔드 포인트로 리다이렉션 할 URL 지정 → 동시 세션 제어 2가지 유형에서 사용자 세션 강제 만료의 경우 |
maximumSession(n) | 사용자당 최대 세션 수를 제어 기본값은 무제한 세션을 허용 |
maxSessionsPreventsLogin(boolean) | ture : 최대 세션 수에 도달했을 때 사용자의 인증을 방지 → 사용자 인증 시도 차단 false(기본값) : 인증하는 사용자에게 접근을 허용하고 기존 사용자의 세션은 만료 → 사용자 세션 강제 만료 |
expiredUrl(경로) | 세션을 만료하고 나서 리다이렉션 할 URL 지정 |
세션 만료 후 리다이렉션 전략
- 우선순위 ⇒ invalidSessionUrl > expiredUrl
- 동시 세션 제어를 위해서는 maximumSessions() API 사용 필수
- 최대 세션 수가 무한대라면 세션 제어를 하는 것이 말이 안 됨
'Language > Spring Security' 카테고리의 다른 글
세션 생성 정책 - sessionManagement().sessionCreationPolicy() (0) | 2024.07.26 |
---|---|
세션 고정 보호 - sessionManagement().sessionFixation() (0) | 2024.07.26 |
SecurityContextRepository / SecurityContextHolderFilter (0) | 2024.07.25 |
사용자 상세 - UserDetails (0) | 2024.07.24 |
사용자 상세 서비스 - UserDetailsService (0) | 2024.07.24 |