如何使用xml在spring security中禁用注销确认?

Vyt*_*alo 9 java spring spring-mvc spring-security logout

我已将 Spring 安全性从 4.x 更新到 5.x。现在,我遇到了这种情况,Spring 安全性要求用户确认注销。有留言

您确定要退出吗?

下面给出了相同的图像。
在此处输入图片说明

我想摆脱这一步。如何摆脱注销确认?

目标:我想注销并重定向到我来自的页面。

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>
Run Code Online (Sandbox Code Playgroud)

小智 6

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .logout()
                .logoutRequestMatcher(new AntPathRequestMatcher("/logout"));
    }
Run Code Online (Sandbox Code Playgroud)

这个对我有用。


Pra*_*ngi 5

这是一个 CSRF 功能,可以避免来自其他站点的恶意 javascript 发起的注销请求。
您的请求是GET: /logout,因此 Spring Security 希望通过用户操作(例如单击)来确认它。

所以要避免它。您的注销请求应该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>
...
Run Code Online (Sandbox Code Playgroud)

或者

<%@ 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>
...
Run Code Online (Sandbox Code Playgroud)

  • @M.Deinum 是的。[查看源代码](https://github.com/spring-projects/spring-security/blob/master/web/src/main/java/org/springframework/security/web/authentication/ui/DefaultLogoutPageGenerateFilter .java) (3认同)