我在这里创建一个完全基于远程的应用程序。
只有一次所有js和css加载。所以我想要会议过期的解决方案。
表示当ajax请求到达控制器时,它将首先进行身份验证,如果会话已过期则会进行会话,然后我想重定向到登录页面relogin。
[编辑 - @Brad]
让我们试着澄清你的要求..
1)通过Ajax向服务器发出请求
2)服务器响应HTTP 401,未经授权
3)Ajax识别401状态并重定向到登录页面
4)登录成功,
5)然后执行旧请求。表示执行第1步请求。
6)但我想不想执行第1步请求,但想每次都执行主页。
答案 0 :(得分:2)
每次请求进入您的操作之前,您都可以使用过滤器拦截器。
更好的方法是使用可用于grails的apache-shiro身份验证插件。
请参阅:Apache Shiro Integration for Grails
在您的应用程序中安装它并进行配置。它很简单,可以满足您的大多数身份验证要求。
答案 1 :(得分:2)
一种方法是让您的客户端AJAX代码检查HTTP 401 response code,这意味着您的用户会话已超时并且不再登录。
使用JQuery ......
$.ajax({
type: "post", url: "/SomeController/SomeAction",
success: function (data, text) {
//...
},
error: function (request, status, error) {
// look for status of 401 and redirect to login
}
});
当然,您只需确保您的网络应用返回相应的状态代码即可。我发现this article在这个问题上引人深思。
还有一些很好的信息<强> [编辑] 强>
好的,从第3步的更新问题来看,这是在ajax请求中发生的,我希望您的用户看不到登录页面,因为您的ajax处理代码将收到401响应,您可以决定不显示它。然后,您可以将用户浏览器重定向到您选择的登录URL。在这种情况下,您将重定向到主页,或者将登录页面配置为接受其他URL参数,以告知用户在登录后要将用户发送到的位置。