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>