반응형
HttpSecurity
@Override
protected void configure(HttpSecurity http) throws Exception {
protected void configure(HttpSecurity http) throws Exception {
http.logout() // 로그아웃 처리
.logoutUrl("/logout") // 로그아웃 처리 URL
.logoutSuccessUrl("/login") // 로그아웃 성공 후 이동 URL
.deleteCookies(" JESSIONID", " remember-me ") // 로그아웃 후 쿠키 삭제
.addLogoutHandler(logoutHandler()) // 로그아웃 후 핸들러
.logoutSuccessHandler(logoutSuccessHandler()); // 로그아웃 성공 후 핸들러
}
원칙적으로 로그아웃 처리 시 POST 방식으로만 처리된다.
로그아웃 처리 시 여러개의 로그아웃 핸들러가 있는데 그 중에서 세션에서 무효화 시키는 등 별도의 핸들러가 존재하지만 별도로 커스텀 로그아웃 핸들러 인터페이스를 구현해서 처리하고 싶으면 addLogoutHandler()에 method명을 적어주면 된다.
처리 PROCESS
1. LogoutFilter
→ POST 방식으로 로그아웃 요청을 받는다.
2. AntPathRequestMatcher(/logout)
→ 요청 정보 URL(Form tag의 action)이 매칭 되는지 확인한다. ( default는 logout이다.)
3. Authentication
→ LogoutFilter가 SecurityContext객체로 부터 인증 객체를 가져와서 SecurityContextLogoutHandler로 전달한다.
4. SecurityContextLogoutHandler
- 세션무효화
- 쿠키삭제
- SecurityContextHolder.clearContext()
위 handler를 이용하면 GET방식으로도 로그아웃을 처리할 수 있음.
5. SimpleUrlLogoutSuccessHandler
→ LogoutFilter가 성공적으로 로그아웃을 처리하면 해당 클래스를 호출해서 로그인 페이지로 이동 시킨다.
로그아웃 PROCESS
LogoutFilter.java
private void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws IOException, ServletException {
if (requiresLogout(request, response)) {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (this.logger.isDebugEnabled()) {
this.logger.debug(LogMessage.format("Logging out [%s]", auth));
}
//spring security에서는 logout handler가 기본적으로 4가지 구현되어있음.
this.handler.logout(request, response, auth);
this.logoutSuccessHandler.onLogoutSuccess(request, response, auth);
return;
}
chain.doFilter(request, response);
}
0번은 본인이 구현한 Config 설정이며 1~4번이 기본적으로 Spring Security에서 제공하는 Handler이다.
반응형
'Framework > Spring Framework' 카테고리의 다른 글
[Spring Boot] Spring Security 세션 인증 정책 예제 (0) | 2021.05.07 |
---|---|
[Spring Boot] Spring Security Remember Me 인증 (0) | 2021.05.03 |
[Spring Boot] Spring Security 로그인 처리 (0) | 2021.05.02 |
[Spring Boot] Spring Security 사용자 정의 보안 기능 구현 (0) | 2021.05.02 |
[SpringFramework] RESTFul Web Service Example - GET, POST, PUT, DELETE 예제 (2) | 2018.08.06 |
댓글