반응형
1. SecurityConfig에 다음과 같이 추가
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
/* 중간 생략 */
http
.sessionManagement()
.sessionFixation().changeSessionId()
.maximumSessions(1)
.maxSessionsPreventsLogin(true)
;
http.logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/login/logout"))
.invalidateHttpSession(true)
.clearAuthentication(true)
.deleteCookies("JSESSIONID", "remember-me");
}
}
- sessionFixation().changeSessionId(): 세션 고정 보호
- maximumSessions(1): session 허용 갯수. 중복 로그인을 차단하려면 무조건 1
- maxSessionsPreventsLogin(true): session 허용 갯수 초과시 동작
- true: 나중에 로그인 한 사용자 차단
- false: 먼저 로그인 한 사용자 로그아웃 처리
- logoutRequestMatcher(new AntPathRequestMatcher("/login/logout")): 로그아웃 요청 시 사용할 URL
- logoutSuccessHandler(logoutSuccessHandler): 로그아웃 성공 시 사용할 핸들러
- invalidateHttpSession(true): 세션 초기화
- clearAuthentication(true): 인증정보 초기화
- deleteCookies("JSESSIONID", "remember-me"): 쿠키 삭제
2. @Bean 추가
1번 설정을 진행한 후에 로그아웃을 해도 로그아웃 처리가 제대로 되지 않아 다른 브라우저에서 로그아웃이 차단되는 현상이 발생합니다.
이 문제를 해결하기 위해 SecurityConfig에 httpSessionEventPublisher 메소드를 추가하여 @Bean 등록을 합니다.
완성된 결과물은 다음과 같습니다.
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
/* 중간 생략 */
http
.sessionManagement()
.sessionFixation().changeSessionId()
.maximumSessions(1)
.maxSessionsPreventsLogin(true)
;
http.logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/login/logout"))
.invalidateHttpSession(true)
.clearAuthentication(true)
.deleteCookies("JSESSIONID", "remember-me");
}
@Bean
public ServletListenerRegistrationBean<HttpSessionEventPublisher> httpSessionEventPublisher() {
return new ServletListenerRegistrationBean<>(new HttpSessionEventPublisher());
}
}
출처: https://www.novasky.net/1638
springboot 2.x spring security 중복로그인 방지, logout 시 session 삭제 안될때 처리
출처 : aljjabaegi.tistory.com/508 springboot 2.x spring security 중복로그인 방지, logout 시 session 삭제 안될때 처리 springboot 2.x spring security 중복로그인 방지, logout 시 session 삭제 안될때 처리 기본적인 로그인
www.novasky.net
728x90
반응형
'back end > java' 카테고리의 다른 글
[보안취약점] Cross-Domain Misconfiguration (CORS) in Spring Security (0) | 2023.02.15 |
---|---|
[보안취약점] Missing Anti-clickjacking Header in spring security (0) | 2023.02.15 |
[java] gradle로 runnable jar 생성하는 방법 (0) | 2023.02.09 |
[java] mssql(SQLServer)에서 datetime2 자료형 날짜 표시 2일 오차 발생하는 문제 해결방법 (0) | 2023.02.09 |
SpringBoot 3.0에서 QueryDsl gradle 설정 방법 (0) | 2023.02.06 |