본문 바로가기

프로젝트

SpringBoot로 그룹캘린더 만들기 - Spring Security 로그아웃 구현하기

 

SpringBoot로 그룹캘린더 만들기 - Spring Security, OAuth2 사용하기 (네이버, 카카오 회원가입 및 로그인)

푸하하.. 약 일주일을 이 회원가입에 신경 쓰느라 블로그 포스팅을 못했는데.. (해결하면 써야지 하다가) 드디어 해결하고 컴백했다.. ^^... 우리는 회원가입 버튼을 클릭 -> 단두린더 회원가입 부

duburani.tistory.com

지난 시간 oAuth2를 사용해 로그인과 회원가입까지 성공했다!

로그인 한 뒤 httpSession에 유저 정보를 넣고 메인으로 들어가면 세션을 체크해서 다른 곳으로 리다이렉트한다.

 

이번에 할 일은 로그아웃 구현해서 정상적으로 로그아웃이 되면 메인으로 리턴 처리하기다.

 

MainController.java
@Controller
@RequiredArgsConstructor
public class MainController {
    private final HttpSession session;

    @GetMapping("/")
    public String login(Model model) {
        Object user = session.getAttribute("user");
        if(user != null){
            return "redirect:/userGroup";
        }

        return "main";
    }
}​
UserController.java
@Controller
@RequiredArgsConstructor
public class UserController {

    // 그룹 조회
    @GetMapping("/userGroup")
    public String userGroup(@RequestParam(required = false, name = "coupleCode") String coupleCode, HttpServletRequest request, Model model){
        HttpSession session = request.getSession();

        Object objUser = session.getAttribute("user");
        if(objUser == null) {
            return "redirect:/";
        }

        model.addAttribute("userInfo", objUser);
        model.addAttribute("coupleCode", coupleCode);
        return "user/userGroup";
    }
}​
WebSecurityConfig
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class WebSecurityConfig {
    private final CustomOAuth2UserService customOAuth2UserService;

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http.cors().and().csrf().disable()
                .
                . (맨 위 블로그 링크 참고)
                .
        ;
        http.logout()
                .logoutUrl("/logout")
                .addLogoutHandler((request, response, authentication) -> {
                    HttpSession session = request.getSession();
                    if (session != null) {
                        session.invalidate();
                    }
                })
                .logoutSuccessHandler((request, response, authentication) -> {
                    response.sendRedirect("/");
                });
        return http.build();
    }​
  • logout() : 로그아웃 시작
  • logoutUrl("/logout") : 화면에서 로그아웃으로 보낼 url
  • addLogoutHandler((request, response, authentication) : 세션 무효화 처리
  • logoutSuccessHandler((request, response, authentication) : 로그아웃 성공한 뒤 콜백 함수

 

스프링 시큐리티를 통해 간단하게 로그아웃 구현을 해보았다!

지금은 유저 정보를 세션에만 넣어주고 있는데 쿠키에도 넣어서 구현해야하나? 쿠키에도 넣는다면 마지막 successHandler 끝나고 쿠키도 삭제해줘야한다.

 

오늘도 코딩 힘차게 완료-!