로그인 정보
사용자가 로그인을 진행한 뒤 사용자 정보는 SecurityContextHolder에 의해서 서버 세션에 관리된다.
이때 세션에 관해 세션의 소멸 시간, 아이디당 세션 생성 개수를 설정하는 방법에 대해 알아보자.
세션 소멸 시간 설정
세션 타임아웃 설정을 통해 로그인 이후 세션이 유지되고 소멸하는 시간을 설정할 수 있다.
세션 소멸 시점은 서버에 마지막 특정 요청을 수행한 뒤 설정한 시간만큼 유지된다. (기본 1800초)
- application.properties
//초 기반
server.servlet.session.timeout=1800
//분 기반
server.servlet.session.timeout=90m
다중 로그인 설정
하나의 아이디에 대해서 여러 브라우저에 로그인하는 방법
https://docs.spring.io/spring-security/reference/servlet/authentication/session-management.html
동일한 아이디로 다중 로그인을 진행할 경우에 대한 설정
- SecurityConfig
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{
http
.sessionManagement((auth)->auth
.maximumSessions(2)
.maxSessionsPreventsLogin(true)
);
return http.build();
}
}
sessionManagement()
메소드를 통한 설정을 진행한다.
maxiumSession(정수)
하나의 아이디에 대한 다중 로그인 허용 개수
maxSessionPreventsLogin(불린)
다중 로그인 개수를 초과하였을 경우 처리 방법
true : 초과시 새로운 로그인 차단
false : 초과시 기존 세션 하나 삭제
결과
2번째까지는 다중 로그인이 되었지만 3번째 브라우저에서는 로그인이 차단되는 모습
세션 고정 보호
세션 고정 공격을 보호하기 위한 로그인 성공 시 세션 설정 방법은 sessionMangement() 메소드의 sessionFixation() 메소드를 통해서 설정할 수 있다.
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{
http
.sessionManagement((auth)->auth
.sessionFixation().changeSessionId()
);
return http.build();
}
}
- sessionManagement().sessionFixation().none() : 로그인 시 세션 정보 변경 안함
- sessionManagement().sessionFixation().newSession() : 로그인 시 세션 새로 생성
- sessionManagement().sessionFixation().changeSessionId() : 로그인 시 동일한 세션에 대한 id 변경
'🌠Development > SpringBoot' 카테고리의 다른 글
[Spring Boot] @Controller (0) | 2024.04.10 |
---|---|
[Spring Security] 10 - csrf enable 설정 방법 (0) | 2024.02.26 |
[Spring Securitiy] 08 - 세션 정보 확인 (0) | 2024.02.25 |
[Spring Security] 07 - 로그인 검증 로직 (0) | 2024.02.22 |
[Spring Security] 06 - 회원가입 로직 (0) | 2024.02.21 |