[SPRING] 스프링 보안 로그 아웃 처리
SPRING스프링 보안 로그 아웃 처리
Spring Security 4.0.0 문서에 따르면 :
그러나 문서의 보안 설정을 따르고 나면 URL / 로그 아웃에 로그 아웃 페이지가 표시되지 않습니다. 대신,
반대로 URL / 로그인이 제대로 작동합니다.
다음은 제 설정입니다.
스프링 프레임 워크 4.1.6 스프링 보안 4.0.0
웹
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>Test8</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/security-config.xml</param-value>
</context-param>
</web-app>
security-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security.xsd">
<http>
<intercept-url pattern="/**" access="hasRole('USER')" />
<form-login />
<logout />
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="aaa" password="111" authorities="ROLE_USER, ROLE_ADMIN" />
<user name="bbb" password="222" authorities="ROLE_USER" />
</user-service>
</authentication-provider>
</authentication-manager>
</beans:beans>
해결법
-
==============================
1.스프링 보안은 자동으로 GET 로그 아웃을 비활성화 한 csrf를 활성화합니다.
의 설정 또는 POST를 사용하여 csrf 보호를 비활성화하면이 문제를 해결할 수 있습니다. 스프링 보안은 자동으로 GET 로그 아웃을 비활성화 한 csrf를 활성화합니다.
의 설정 또는 POST를 사용하여 csrf 보호를 비활성화하면이 문제를 해결할 수 있습니다. http://docs.spring.io/spring-security/site/docs/4.0.1.RELEASE/reference/htmlsingle/#csrf-logout을 참조하십시오.
-
==============================
2.간단히 로그 아웃 할 JSP로 다음 코드를 넣으십시오.
간단히 로그 아웃 할 JSP로 다음 코드를 넣으십시오.
<c:url var="logoutUrl" value="/j_spring_security_logout" /> <form action="${logoutUrl}" id="logout" method="post"> <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" /> </form> <a href="#" onclick="document.getElementById('logout').submit();">Logout</a>
bean 구성 파일에있는 해당 항목 -
<security:logout logout-url="/j_spring_security_logout" logout-success-url="/whateverPageYouWant" invalidate-session="true" />
- 봄 보안을 위해 나를 위해 일했다.
-
==============================
3.https://docs.spring.io/spring-security/site/docs/5.1.0.RELEASE/reference/htmlsingle/
https://docs.spring.io/spring-security/site/docs/5.1.0.RELEASE/reference/htmlsingle/
로그 아웃 처리
WebSecurityConfigurerAdapter를 사용하면 로그 아웃 기능이 자동으로 적용됩니다. 기본값은 URL / 로그 아웃에 액세스하면 다음과 같은 방법으로 사용자를 로그 아웃한다는 것입니다.
HTTP 세션 무효화 구성된 모든 RememberMe 인증 정리 SecurityContextHolder 지우기 / login? 로그 아웃으로 리디렉션 그러나 로그인 기능을 구성하는 것과 마찬가지로 로그 아웃 요구 사항을 추가로 사용자 정의 할 수있는 다양한 옵션이 있습니다.
protected void configure(HttpSecurity http) throws Exception { http.logout() .logoutUrl("/my/logout") .logoutSuccessUrl("/my/index") .logoutSuccessHandler(logoutSuccessHandler) .invalidateHttpSession(true) .addLogoutHandler(logoutHandler) .deleteCookies(cookieNamesToClear) .and() ... }
-
==============================
4."로그 아웃 페이지"는 없습니다. / logout은 Spring의 엔드 포인트로서, 앱이 사용자를 로그 아웃하도록 요청한다는 것을 알려줌으로써 특정 핸들러를 호출합니다.
"로그 아웃 페이지"는 없습니다. / logout은 Spring의 엔드 포인트로서, 앱이 사용자를 로그 아웃하도록 요청한다는 것을 알려줌으로써 특정 핸들러를 호출합니다.
사용자를 로깅 한 후에 Spring은 다른 페이지로 리디렉션되며 XML에서 "기본 대상"을 구성 할 수 있습니다.
-
==============================
5.스프링 보안에 추가하기 :
스프링 보안에 추가하기 :
<logout logout-success-url="/anonymous.html" logout-url="/perform_logout" delete-cookies="JSESSIONID" />
http 태그에서
-
==============================
6.
@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { //... http.logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout")); } }
from https://stackoverflow.com/questions/29532130/spring-security-logout-handling by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring Rest Service - 로그인을 시도 할 때 잘못된 CSRF 토큰 (0) | 2019.04.08 |
---|---|
[SPRING] Spring MVC : @ResponseStatus (이유 = '')를 Tomcat의 @ResponseBody 예외 핸들러에서 사용하기 (0) | 2019.04.08 |
[SPRING] Spring ApplicationListener가 webapp에서 두 번 실행됩니다. (0) | 2019.04.08 |
[SPRING] org.springframework.web.client.HttpClientErrorException : 400 잘못된 요청 (0) | 2019.04.08 |
[SPRING] 스프링 배치 "기본"컨텍스트 변수는 무엇입니까? (0) | 2019.04.08 |