스프링 시큐리티에서 세션 디스트로이 이벤트 전후작업 하기.
사용자가 로그아웃할때, 로그를 남겨야한다는 요구사항이 들어왔다.
사용자가 로그아웃 버튼을 클릭해서 로그아웃을 하면, SimpleUrlLogoutSuccessHandler를 상속받아 onLogoutSuccess 메서드를 구현해서 처리할 수 있다.
@Override
public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
// 전 작업
super.onLogoutSuccess(request, response, authentication);
}
여기서 문제는, 사용자가 로그아웃 버튼을 클릭해서 로그인을 하는것이 아니라 세션이 만료되어 로그아웃될때를 잡아야 한다.
세션 만료 이벤트를 잡아서 처리하려면, ApplicationListener<SessionDestroyedEvent>를 구현하여 처리할 수 있다.
public class SessionDestroyListener implements ApplicationListener<SessionDestroyedEvent> {
@Override
public void onApplicationEvent(SessionDestroyedEvent event) {
List<SecurityContext> securityContexts = event.getSecurityContexts();
for (SecurityContext securityContext : securityContexts) {
// 세션 만료시 작업.
}
}
}
web.xml에 아래 리스너를 등록한다.
<listener>
<listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>
그리고 SessionDestroyListen을 스프링빈으로 등록한다.
'Java > Spring' 카테고리의 다른 글
Spring Security 로그인 성공 혹은 실패 후 부가 작업 하기. (0) | 2018.03.21 |
---|---|
Thymeleaf에서 날짜 관련 Utility 사용하기. (0) | 2016.12.17 |
Spring Security, 현재 사용자 정보 가져오기. (0) | 2016.10.11 |
Spring Boot 에 JOOQ 설정하기. (1) | 2016.09.11 |
마이바티스(MyBatis) 동적 쿼리 Java로 만들기. (0) | 2016.09.07 |