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 끝나고 쿠키도 삭제해줘야한다.
오늘도 코딩 힘차게 완료-!