我有一个安全的Backbone.js应用程序(使用Spring security atm。),因此登录的用户必须具有有效的会话cookie(JSESSIONID )。现在,如果此会话无效(删除,过期,无论)并且用户尝试发出请求,则Spring安全性将返回302错误,以尝试将用户重定向到登录表单。处理HTTP 302错误并在Backbone.JS“同步”方法中重定向
正如解释in this answer,这302响应被浏览器(它没有达到我的应用程序),那么,什么是回到我的应用程序是用的contentType =“text/html的” 200 OK响应处理(含登录形成)。
这是一个问题,因为当我的骨干模型试图做一个网址同步,它期望JSON。如果这个同步发生时没有一个有效的会话,当预期“application/json”时会返回200“text/html”响应,给我一个jQuery.extend.parseJSON
中的JSON解析错误。
在this question/answer的大力帮助下,我重写了Backbone.sync
方法以便使用我自己的错误处理。但是,因为302永远不会到达我的错误处理程序,所以我无法覆盖自己的重定向。
我的情况与this question非常相似,但是从未公布过该问题的最终解决方案。有人能帮我找出确保重定向到登录页面的理想方式吗?
+1用于检测AJAX请求,不用于他们默认重定向到登录页面 –
在Spring Security 3.1+中,您可以为您的AJAX URI定义单独的领域(''tag),并将其配置为使用基本HTTP认证只(见[这个答案](http://stackoverflow.com/a/11968411/2842067),但不要使AJAX URI无状态 - 不要使用'create-session =“无状态”')。当会话过期时,您将获得这些URI的401个响应。但是,浏览器会提示输入登录名和密码 - 请参阅[本答案](http://stackoverflow.com/a/9872582/2842067)(附带评论)或[本文](http://loudvchar.blogspot。 ca/2010/11/avoid-browser-popup-for-401.html)。 –
Alexey