login 설정

1. logout Configuration 설정 (구버전)

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain fileterChain(HttpSecurity http) throws Exception {

        http
            .logout()
            .logoutUrl("/logout") // default 는 "logout"이다. spring security 의 logout 처리는 post 방식으로 처리된다.
            .logoutSuccessUrl("/login") // 로그아웃 성공 시 이동할 페이지만 알려줌
            .addLogoutHandler(new LogoutHandler() {
                @Override
                public void logout(HttpServletRequest request, HttpServletResponse response,
                    Authentication authentication) {
                    HttpSession session = request.getSession();
                    session.invalidate(); //세션 무효화
                }
            })
            .logoutSuccessHandler(new LogoutSuccessHandler() {
                //.logoutSuccessUrl()과 비슷하다. 다만 .logoutSuccessHandler()이 좀 더 다채롭게 구현이 가능하다.
                @Override
                public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response,
                    Authentication authentication) throws IOException, ServletException {
                    response.sendRedirect("/login");
                }
            })
            .deleteCookies("remember-me") //서버에서 만든 쿠키를 삭제
        ;
        
        return http.build();
    }
}

2. logout Configuration 설정 (신버전 - 람다식 사용)

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain fileterChain(HttpSecurity http) throws Exception {

        http
            .logout(form ->
                form
                    .logoutUrl("/logout") 
                    .logoutSuccessUrl("/login?logout") 
                    .addLogoutHandler((request, response, authentication) -> {
                        HttpSession session = request.getSession();
                        session.invalidate();
                    })
                    .logoutSuccessHandler((request, response, authentication) -> 
                        response.sendRedirect("/login"))
                    .deleteCookies("remember-me") 
        );
        
        return http.build();
    }
}

3. 설정 후 출력결과

Comments