Spring/Spring Security

[Spring Security] GET 로그아웃 처리

빅콜팝 2022. 11. 3. 06:52
728x90
반응형

스프링 시큐리티의 로그아웃 기능은 별도의 설정을 하지 않으면 POST 방식을 지원한다.

이를 GET 방식으로 변경해주었다.

 

tymeleaf를 사용한 get 로그아웃 처리

 

1. build.gradle dependency 추가

implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5'

 

2. logout 기능을 구현할 .html 헤더 부분에 springsecurity name space 추가

<html xmlns:th="http://www.thymeleaf.org"
      xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity5">

 

3. 로그인 여부에 따라 보여진 태그 sec:authorize의 isAnonymous() / isAuthenticated() 로 구분 및 로그아웃 경로 설정

<div sec:authorize="isAnonymous()" >
  <a class="text-dark" th:href="@{/member/login}">로그인</a>
  <span class="text-muted px-2">|</span>
  <a class="text-dark" th:href="@{/member/signup}" th:field="signup">회원가입</a>
</div>
<div sec:authorize="isAuthenticated()">
  <a class="text-dark"  href="#;" th:field="${user.username}">회원명</a>
  <span class="text-muted px-2">|</span>
  <a class="text-dark"  th:href="@{/member/logout}" th:field="logout">로그아웃</a>
</div>

isAnonymous() : 로그인하지 않은 사용자에게만 보임

isAuthenticated() : 로그인한 사용자에게만 보임

 

4. GET 방식으로 로그아웃 시 컨트롤러에서 로그아웃 처리 핸들러 호출

@GetMapping("/logout")
public String logout(HttpServletRequest request, HttpServletResponse response){

    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

    if(authentication != null){
        new SecurityContextLogoutHandler().logout(request,response,authentication);
    }

    return "redirect:/";
}
728x90
반응형