【发布时间】:2014-06-21 08:23:43
【问题描述】:
我使用 Spring Security 3.2.1 来保护部署到 Tomcat 的 Spring MVC 应用程序。
当一个 Web 会话过期时,Spring Security 会自动将用户重定向到登录页面。但是,我的一些 AJAX 请求使用PUT、POST 和DELETE 方法。当其中一个请求被重定向时,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