如何使用 xml 在 spring 安全性中禁用注销确认?
How to disable logout confirmation in spring security using xml?
我已将 Spring 安全性从 4.x 更新到 5.x。现在,我遇到了 Spring 安全要求用户确认注销的情况。 带有消息
您确定要退出吗?
下面给出的图片相同。
我想去掉这一步。如何摆脱注销确认?
Objective : 我想注销并重定向到我来自的页面。
security.xml :
<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-4.2.xsd">
<http auto-config="true" use-expressions="true">
<!-- isAnonymous() -->
<intercept-url pattern="/**/add/**" access="isAuthenticated()" />
<intercept-url pattern="/**/delete/**" access="isAuthenticated()" />
<intercept-url pattern="/**/update/**" access="isAuthenticated()" />
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="uzer64" password="{noop}123456" authorities="ROLE_USER" />
<user name="admin" password="{noop}admin" authorities="ROLE_ADMIN" />
</user-service>
</authentication-provider>
</authentication-manager>
</beans:beans>
您可以尝试以下方法:-
<logout
logout-success-url="/anonymous.html"
logout-url="/perform_logout" />
你可以提到url你想redirect.You也可以添加
delete-cookies="JSESSIONID"
用于删除 cookie。
这是一项 CSRF 功能,可避免来自其他站点的恶意 javascript 发起注销请求。
您的请求是 GET: /logout
,因此 spring 安全部门希望通过用户操作(例如点击)来确认它。
所以要避免。您的注销请求应该是 POST
并且包含有效的 _csrf
令牌。
您可以使用 spring 表单标签和方法 post 来实现它,如下所示
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
...
<form:form action="${pageContext.request.contextPath}/logout"
method="post" modelAttribute="AnyModelAttributePassedFromController">
<form:button value="submit"> Logout</form:button>
</form:form>
...
或
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
...
<form:form action="${pageContext.request.contextPath}/logout"
method="post" modelAttribute="_csrf">
<form:button value="submit"> Logout</form:button>
</form:form>
...
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"));
}
对我有用。
我已将 Spring 安全性从 4.x 更新到 5.x。现在,我遇到了 Spring 安全要求用户确认注销的情况。 带有消息
您确定要退出吗?
下面给出的图片相同。
我想去掉这一步。如何摆脱注销确认?
Objective : 我想注销并重定向到我来自的页面。
security.xml :
<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-4.2.xsd">
<http auto-config="true" use-expressions="true">
<!-- isAnonymous() -->
<intercept-url pattern="/**/add/**" access="isAuthenticated()" />
<intercept-url pattern="/**/delete/**" access="isAuthenticated()" />
<intercept-url pattern="/**/update/**" access="isAuthenticated()" />
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="uzer64" password="{noop}123456" authorities="ROLE_USER" />
<user name="admin" password="{noop}admin" authorities="ROLE_ADMIN" />
</user-service>
</authentication-provider>
</authentication-manager>
</beans:beans>
您可以尝试以下方法:-
<logout
logout-success-url="/anonymous.html"
logout-url="/perform_logout" />
你可以提到url你想redirect.You也可以添加
delete-cookies="JSESSIONID"
用于删除 cookie。
这是一项 CSRF 功能,可避免来自其他站点的恶意 javascript 发起注销请求。
您的请求是 GET: /logout
,因此 spring 安全部门希望通过用户操作(例如点击)来确认它。
所以要避免。您的注销请求应该是 POST
并且包含有效的 _csrf
令牌。
您可以使用 spring 表单标签和方法 post 来实现它,如下所示
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
...
<form:form action="${pageContext.request.contextPath}/logout"
method="post" modelAttribute="AnyModelAttributePassedFromController">
<form:button value="submit"> Logout</form:button>
</form:form>
...
或
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
...
<form:form action="${pageContext.request.contextPath}/logout"
method="post" modelAttribute="_csrf">
<form:button value="submit"> Logout</form:button>
</form:form>
...
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"));
}
对我有用。