3. Logout 처리 > LogoutFilter
- 📚 Spring/Spring-Security
- 2022. 3. 3. 10:32
| Logout 처리
http.logout() : 로그아웃 기능 작동
http.logout() // 로그아웃 처리
.logoutUrl("/logout") // 로그아웃 처리 URL
.logoutSuccessUrl("/login") // 로그아웃 성공 후 이동페이지
.deleteCookies("JSESSIONID“, "remember-me") // 로그아웃 후 쿠키 삭제
.addLogoutHandler(logoutHandler()) // 로그아웃 핸들러
.logoutSuccessHandler(logoutSuccessHandler()) // 로그아웃 성공 후 핸들러
LogoutFilter
- POST방식으로 처리한다
- AutPathRequestMatcher(/logout) 로 logout 링크와 일치하지 않으면 다음 필더 진행
- 링크가 맞으면 SecurityContext로 부터 Authentication객체를 꺼내온다
- SecurityCotextLogoutHandler가 세션무효화, 쿠키삭제 등의 처리를 한다
- 모든 처리를 마치고 SimpleUrlLogoutSuccssHandler를 호출해 login페이지로 간다.
💻 LogoutFilter.java
private void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws IOException, ServletException {
if (this.requiresLogout(request, response)) {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (this.logger.isDebugEnabled()) {
this.logger.debug(LogMessage.format("Logging out [%s]", auth));
}
this.handler.logout(request, response, auth);
this.logoutSuccessHandler.onLogoutSuccess(request, response, auth);
} else {
chain.doFilter(request, response);
}
}
3. 디버그로 분석
package kyh.security.basicsecurity;
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class SecurityConfig extends WebSecurityConfigurerAdapter {
private final UserDetailsService userDetailsService;
@Override
protected void configure(HttpSecurity http) throws Exception {
//인가 정책
http
.authorizeRequests()
.anyRequest().authenticated();
//인증 정책
http
.formLogin()
;
http
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/login")
.addLogoutHandler(new LogoutHandler() {
@Override
public void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication) {
HttpSession session = request.getSession();
session.invalidate();
}
})
.logoutSuccessHandler(new LogoutSuccessHandler() {
@Override
public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
response.sendRedirect("/login");
}
})
.deleteCookies("remember-me");
}
}
'📚 Spring > Spring-Security' 카테고리의 다른 글
익명사용자 필터 : AnonymousAuthenticationFilter (0) | 2022.03.16 |
---|---|
Remember Me 인증 (0) | 2022.03.08 |
[Spring Security] 2. Form Login 필터 : UsernamePasswordAuthenticationFilter (0) | 2022.03.03 |
[Spring Security] Form Login 인증방식 (0) | 2022.03.02 |
[Spring Security] Security Filter 의 종류 (0) | 2022.02.13 |