防止 Spring Security 在登录/注销后进行 302 重定向

Posted

技术标签:

【中文标题】防止 Spring Security 在登录/注销后进行 302 重定向【英文标题】:Prevent Spring Security from 302 redirecting after login/logout 【发布时间】:2015-09-27 17:32:57 【问题描述】:

成功登录或注销后,以及身份验证失败后,重定向到 j_spring_security_check,状态码为 302。

我怎样才能阻止这个请求?

截图:

【问题讨论】:

【参考方案1】:

我认为您可以通过执行两个操作来解决此问题,一个用于桌面浏览器,另一个用于移动应用程序。在服务器端从移动应用程序获取注销请求后,您可以避免重定向。

【讨论】:

【参考方案2】:

我不确定你想做什么,但你可以将登录表单数据作为 AJAX 请求而不是表单帖子发送。

否则,there are some suggestions here

【讨论】:

这是出于安全原因。我不想表明我正在使用 Spring Security。我可以重命名吗? 还有其他方式可以看出您正在使用 Spring Security。安全令牌等。 隐匿安全不是一个好主意,您将无法隐藏它。 Spring security 4+ 使用login。但是 mikeb 说的是真的 ;)【参考方案3】:

如果有人仍想更改默认名称:

添加属性login-processing-url,并给出自己的名字(默认为j_spring_security_check)。

<security:form-login
                login-page="/login"
                authentication-failure-url="/login/401"
                username-parameter="user"
                password-parameter="pass"
                default-target-url="/"
                always-use-default-target="true"
                login-processing-url="/check"/>

然后在登录表单中:

action="<c:url value='/check' />"

对注销也一样:

<security:logout
                logout-success-url="..."
                invalidate-session="..."
                delete-cookies="..."
                logout-url="/logout"/>

【讨论】:

以上是关于防止 Spring Security 在登录/注销后进行 302 重定向的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security之注销登录

您如何在 spring-security 中注销所有已登录的用户?

Spring security logout - 仅在登录用户触发注销时添加消息

Spring Security SAML 单点登录全局单点注销LogoutRequest解析问题

为什么Spring Security看不见登录失败或者注销的提示

Spring Security 无法注销