스프링 시큐리티 - 로그아웃이 안된다.

jinvicky·2023년 2월 14일
0

2023 Spring Project TIL

목록 보기
17/32

https://kimcoder.tistory.com/245 따라 하는 중이다.
login-processing-url이 컨트롤러 맵핑이 없어도 제대로 동작했던 것처럼
logout-url에 요청해도 자연스레 logout-success-url로 리다이렉트 될 것이라고 생각했다.

근데 결과는 페이지 404였다.....왜인지는 모르겠으나 일단 되지 않는다...

그래서 https://baejangho.com/entry/Spring-Security-Logout => 이 사이트를 보고
context.xml 설정을 주석처리하고 컨트롤러 단에서 url을 맵핑해서 처리하도록 해보기로 했다.
(단 이걸 하면 기존의 logout successHandler를 무시한다고 한다. 근데 난 안 했어서 모른다)

기존

<s:logout
               logout-url="/security_logout"-->
              logout-success-url="/"-->
              invalidate-session="true"-->
              delete-cookies="true"-->
      />

변경한 후 (HomeController에서 작성한 코드)

@GetMapping( "/security_logout")
    public String logout(HttpServletRequest request, HttpServletResponse response) throws Exception {
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        if (auth != null) {
            new SecurityContextLogoutHandler().logout(request, response, auth);
        }
        return "redirect:/";
    }

원하는 대로 redirect:/는 했으나 세션이 사라졌는지 application을 봐서도 잘 모르겠었다.
그래서 따라하던 코드를 사용해서 session on/off를 메인 페이지에서 띄워보기로 했다.
security/tags 라이브러리를 사용하면 session이 있는지 없는지 확인할 수 있다.

<s:authorize access="isAuthenticated()">
    <p> Session On </p>
</s:authorize>
<s:authorize access="isAnonymous()">
    <p> Session Off </p>
</s:authorize>

인덱스 페이지에서 결과적으로 잘 동작하는 걸 확인했다.

근데 그냥 든 생각인데 팀원이 게시판을 만든다고 하면 작성자로 분명히 세션에 저장해 둔 아이디를 가져다 쓸 텐데 내가 시큐리티 한다고 그거 깜빡하면 사람 곤란하게 할 거 같다.... 세션 저장 꼭 해야 할거 같은데
아직 시큐리티 몰라서.... 갈 길이 멀다.

아 찾았다
1. jstl taglib 추가한다.
2. 아래와 같이 입력한다. 시큐리티의 name은 우리가 생각하는 아이디라고 한다. 헷갈린다!

<p> HELLO ${pageContext.request.userPrincipal.name} </p>
profile
Front-End와 Back-End 경험, 지식을 공유합니다.

0개의 댓글

관련 채용 정보