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
반응형
'Spring > Spring Security' 카테고리의 다른 글
[Spring Security] JWT Token (0) | 2023.05.20 |
---|---|
[Spring Security] ajax login (0) | 2023.02.15 |
[Spring Security] 스프링 시큐리티를 이용하여 로그인, 회원가입 구현하기 (0) | 2022.10.30 |
[Spring Secururity ERROR] 스프링 빈 순환 참조 에러 The dependencies of some of the beans i (1) | 2022.10.30 |
[Spring Security] Spring Security 설정하기 (0) | 2022.10.29 |