로그인이 있으면 당연히 로그아웃이 있는게 당연하다. 스프링시큐리티를 사용하지 않고 로그인 기능을 구현하게 되면 별도로 로그아웃 url을 통해 세션관리를 해주었는데 이러한 과정을 스프링시큐리티에서는 어떤식으로 구현하고 또 어떤 기능들이 있는지 살펴보는 내용을 알아보도록 하겠다.
xml 설정
<http auto-config="true" use-expressions="true">
<intercept-url pattern="/user/**" access="hasAnyRole('ROLE_USER','ROLE_GUEST')"/>
<intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')"/>
<intercept-url pattern="/**" access="permitAll"/>
<form-login
username-parameter="id"
password-parameter="pw"
login-processing-url="/login"
login-page="/loginPage"
default-target-url="/all" />
<logout
logout-url="/logout"
logout-success-url="/all"
delete-cookies=""/>
</http>
자세한 설명은 생략한다...
logout-url : 로그아웃 URL
logout-success-url : 로그아웃 성공시, 이동할 URL. (default: /login?logout)
invalidate-session : 로그아웃 시, session을 무효화할 지 선택. (default: true)
delete-cookies : 로그아웃 성공시, 삭제할 쿠키 이름 지정
success-handler-ref : 로그아웃 성공시, logout-success-url 이 아닌 핸들러로 리다이렉트
로그아웃 버튼 만들기
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>ADMIN 접근 가능페이지</h1>
<sec:authorize access="isAuthenticated()">
<a href="#" onclick="document.getElementById('logout').submit();">로그아웃</a>
</sec:authorize>
<form id="logout" action="/logout" method="POST">
<input name="${_csrf.parameterName}" type="hidden" value="${_csrf.token}"/>
</form>
</body>
</html>
로그아웃 버튼인데 sec태그를 사용하여 로그인한 사용자에게만 로그아웃 버튼이 보이도록 했다.
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags"%>
참고로 sec태그를 사용하기 위해서는 jsp파일에 선언을 해주어야 한다.
<input name="${_csrf.parameterName}" type="hidden" value="${_csrf.token}"/>
스프링시큐리티는 보안을 위하여 모든 요청에 대한 토큰을 확인한다.
<security:csrf disabled="false"/>
스프링시큐리티 설정 xml파일에서 이부분이 토큰을 사용하겠다는 의미이다. false가 사용하겠다는 의미이니 이부분을 조심해야 하며
디폴트값이 false이기 때문에 별도로 설정을 하지 않느다면 자동으로 토큰처리가 된다.
<sec:authorize access="isAuthenticated()">
<a href="#" onclick="document.getElementById('logout').submit();">로그아웃</a>
</sec:authorize>
<form id="logout" action="/logout" method="POST">
<input name="${_csrf.parameterName}" type="hidden" value="${_csrf.token}"/>
</form>
로그인도 처럼 로그아웃도 마찬가지로 요청은 POST로 해야 한다.
하지만 화면단의 상황에 따라 a태그를 사용할 수밖에 없는 상황이라면 임기응변으로 위의 코드처럼 처리가 가능하다.
'Spring > Spring Security' 카테고리의 다른 글
[Spring Security] 5. Mybatis를 이용하여 DB연동하기 (1) | 2020.02.08 |
---|---|
[Spring Security] 3. 내가만든 커스텀 로그인화면 사용하기 (0) | 2020.02.07 |
[Spring Security] 2. 권한설정 (0) | 2020.02.07 |
[Spring Security] 1. 기본설정 하기 (3) | 2020.02.07 |
댓글