基于Ajax的应用程序,并希望在会话过期后重定向到登录页面

基于Ajax的应用程序,并希望在会话过期后重定向到登录页面,ajax,grails,grails-2.0,Ajax,Grails,Grails 2.0,在这里,我制作了一个完全基于远程的应用程序 只加载一次所有js和css。所以我需要会话的解决方案已过期 这意味着当ajax请求到达控制器时,它将首先进行身份验证,对于会话,若会话过期,则我希望重定向到登录页面重新登录 [编辑-@Brad] 让我们试着澄清一下你的要求 1) 通过Ajax向服务器发出请求 2) 服务器以HTTP 401响应,未经授权 3) Ajax识别401状态并重定向到登录页面 4) 登录成功 5) 然后执行旧请求。表示执行步骤1请求 6) 但是我不想执行第一步的请求,而是希望每

在这里,我制作了一个完全基于远程的应用程序

只加载一次所有js和css。所以我需要会话的解决方案已过期

这意味着当ajax请求到达控制器时,它将首先进行身份验证,对于会话,若会话过期,则我希望重定向到登录页面重新登录

[编辑-@Brad]

让我们试着澄清一下你的要求

1) 通过Ajax向服务器发出请求

2) 服务器以HTTP 401响应,未经授权

3) Ajax识别401状态并重定向到登录页面

4) 登录成功

5) 然后执行旧请求。表示执行步骤1请求


6) 但是我不想执行第一步的请求,而是希望每次都执行主页。

在每次请求进入您的操作之前,您可以使用筛选器侦听器

更好的方法是使用适用于grails的ApacheShiro身份验证插件

见此:


在应用程序中安装并配置它。它很简单,可以满足您的大多数身份验证要求。

您可以在每次请求进入您的操作之前使用筛选器侦听器

更好的方法是使用适用于grails的ApacheShiro身份验证插件

见此:


在应用程序中安装并配置它。它很简单,可以满足您的大部分身份验证要求。

一种方法是让客户端AJAX代码检查是否存在错误,这意味着您的用户会话已超时,他们不再登录

使用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
    }
});
当然,您只需确保您的web应用程序返回适当的状态代码。我发现这个问题很发人深省

还有一些关于

[编辑]


好的,根据您在步骤3)中更新的问题,这是在一个ajax请求上发生的,我希望您的用户不会看到登录页面,因为您的ajax处理代码将收到401响应,您可以决定不显示它。然后,您可以将用户浏览器重定向到您选择的登录URL。在这种情况下,您可以重定向到主页,或者将登录页面配置为接受附加的URL参数,以告知用户登录后要发送到的位置。

一种方法是让客户端AJAX代码检查是否存在错误,这意味着您的用户会话已超时,他们不再登录

使用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
    }
});
当然,您只需确保您的web应用程序返回适当的状态代码。我发现这个问题很发人深省

还有一些关于

[编辑]



好的,根据您在步骤3)中更新的问题,这是在一个ajax请求上发生的,我希望您的用户不会看到登录页面,因为您的ajax处理代码将收到401响应,您可以决定不显示它。然后,您可以将用户浏览器重定向到您选择的登录URL。在这种情况下,您可以重定向到主页,或者将登录页面配置为接受额外的URL参数,以告知用户登录后要将其发送到的位置。

是controller javascript函数吗?如果是这样的话,你可以有一个定时器,它会在每次请求时重置。如果超时,您可以重定向到window.location.href=“loginpage”上的登录页面。有一个问题,我尝试过,但在下一次登录时,它会直接转到该操作并呈现所有未格式化的数据。您的意思是登录页面本身呈现为您的数据?如果是这种情况,则呈现重定向到登录页面的javascript。不,不是登录页面,而是在登录成功后,它直接执行该操作,并呈现其输出。在cotext中表示方法路径在那里并直接到达那里。我不清楚您的问题,请您用示例或示例代码详细说明您正在做什么以及您想要什么。我想我们可以解决这个问题。控制器是javascript函数吗?如果是这样的话,你可以有一个定时器,它会在每次请求时重置。如果超时,您可以重定向到window.location.href=“loginpage”上的登录页面。有一个问题,我尝试过,但在下一次登录时,它会直接转到该操作并呈现所有未格式化的数据。您的意思是登录页面本身呈现为您的数据?如果是这种情况,则呈现重定向到登录页面的javascript。不,不是登录页面,而是在登录成功后,它直接执行该操作,并呈现其输出。在cotext中表示方法路径在那里并直接到达那里。我不清楚您的问题,请您用示例或示例代码详细说明您正在做什么以及您想要什么。我想我们可以解决这个问题,但我使用了SpringSecurityPluing。在那个插件里我要换的地方请告诉我!!我没有使用SpringSecurity,但它似乎相当简单。请阅读保护AJAX请求一节,但我使用了SpringSecurityPling。在那个插件里我要换的地方请告诉我!!我没有使用SpringSecurity,但它似乎相当简单。请阅读保护AJAX请求的部分是的,我知道,但请阅读上面的讨论和评论,然后你会理解问题…@ankit5607san-你还没有澄清你是在使用shiro还是spring security或你自己的东西?是的,我知道,但请阅读上面的讨论和评论,然后你会理解问题…@ankit5607san-你还没有弄清楚你是在使用shiro还是spring security或者你自己的东西?