【问题标题】:How can I change the redirect method in Spring Security from 302 to 303?如何将 Spring Security 中的重定向方法从 302 更改为 303?
【发布时间】:2014-06-21 08:23:43
【问题描述】:

我使用 Spring Security 3.2.1 来保护部署到 Tomcat 的 Spring MVC 应用程序。

当一个 Web 会话过期时,Spring Security 会自动将用户重定向到登录页面。但是,我的一些 AJAX 请求使用PUTPOSTDELETE 方法。当其中一个请求被重定向时,FireFox 会显示此对话框(其他浏览器的行为不同):

根据HTTP/1.1 specification,这是带有 302 状态代码的重定向的正常行为,它说:

如果收到 302 状态代码以响应请求,而不是 GET 或 HEAD,用户代理不能自动重定向 除非用户可以确认,否则请求...

我想摆脱对话。我认为,如果 Spring Security 使用带有 303 状态码(而不是 302)的响应,则不会出现对话。如何将状态码更改为 303?

【问题讨论】:

  • 我自己的解决方案:为您的 AJAX URI 定义一个单独的领域(<http> 标签),并将其配置为仅使用基本的 HTTP 身份验证(请参阅this answer,但不要使用create-session="stateless")。当会话到期时,您将收到 401 响应,该响应可以在客户端被拦截。但是,浏览器会提示输入登录名和密码 - 请参阅 this answer(使用 cmets)或 this post 以获得解决方案。

标签: http firefox spring-mvc redirect spring-security


【解决方案1】:

1) RFC 2616 已过时。当前规范中的文本为 (http://svn.tools.ietf.org/svn/wg/httpbis/specs/rfc7231.html#rfc.section.6.4):

状态码的 3xx(重定向)类表明用户代理需要采取进一步的行动来满足请求。如果提供了 Location 头字段(第 7.1.2 节),用户代理可以自动将其请求重定向到 Location 字段值所引用的 URI,即使不理解特定的状态代码。自动重定向需要注意不安全的方法,如 4.2.1 节中定义的那样,因为用户可能不希望重定向不安全的请求。

2) Firefox 正在删除这些提示。见https://bugzilla.mozilla.org/show_bug.cgi?id=677754

3) 303 是否比 302 更合适实际上取决于重定向的语义是什么。

【讨论】:

  • +1 进行澄清。我不知道规范最近发生了变化。但是我需要在当前版本的 FireFox 中解决这个问题。
  • Alexey: 或者你已经可以在 Firefox 配置中更改它;或者等 18 周左右。
猜你喜欢
  • 2020-08-28
  • 2020-07-05
  • 1970-01-01
  • 2013-12-25
  • 1970-01-01
  • 2012-12-02
  • 2012-01-26
  • 2015-11-30
  • 2019-02-01
相关资源
最近更新 更多