Session 会话超时登录时,会在<;车身>;标记,而不是重定向到新的gsp页面

Session 会话超时登录时,会在<;车身>;标记,而不是重定向到新的gsp页面,session,grails,login,timeout,Session,Grails,Login,Timeout,我是Grails新手,正在处理一个只有两个控制器的项目,一个用于登录,另一个用于资源管理器(类似于windows资源管理器,左侧面板显示树状结构,右侧将文件夹内容显示为表) 应用程序正在按预期工作,这意味着当用户访问应用程序时,如果用户未登录,它将显示登录屏幕,如果用户已登录,它将显示浏览器屏幕 但会话超时情况并非如此:假设会话已超时,用户单击浏览器屏幕右侧面板中的链接,则登录屏幕将显示在右侧面板中 我正在使用SecurityFilter重定向到登录屏幕 SecurityFilters.groo

我是Grails新手,正在处理一个只有两个控制器的项目,一个用于登录,另一个用于资源管理器(类似于windows资源管理器,左侧面板显示树状结构,右侧将文件夹内容显示为表)

应用程序正在按预期工作,这意味着当用户访问应用程序时,如果用户未登录,它将显示登录屏幕,如果用户已登录,它将显示浏览器屏幕

但会话超时情况并非如此:假设会话已超时,用户单击浏览器屏幕右侧面板中的链接,则登录屏幕将显示在右侧面板中

我正在使用SecurityFilter重定向到登录屏幕

SecurityFilters.groovy

def过滤器={

    loginCheck(controller:'*', action:'*') {
        before = {
    if (!session.idpuser && actionName != "login") {
                redirect(controller: "user", action: "login")                   
                return false 
            }
        }
    }
}
userController.groovy

def登录(){

}

explorerController.groovy

def生成文件={

.....
render(template: 'list', model: [ dirList: dirList])
}

UrlMappings.groovy

静态映射={

    "/$controller/$action?/$id?"{
        constraints {
            // apply constraints here
        }
    }

    "/"(action:"file", controller: "explorer")  
    "500"(view:'/error')
}
我认为login.gsp在右侧面板中呈现的原因是,当用户单击右侧面板中的链接时,会调用“generateFiles”操作,这将login.gsp呈现为explorer.gsp中的模板。但我不知道如何修复它:(

如果有人能帮我解决这个问题,我将不胜感激。
请帮助!!!!!

由于这是一个基于ajax的网站,您需要明确处理“您需要登录”在您的ajax响应处理程序中进行响应,并在需要时强制用户登录页面。

看起来我发现解决方案可能不是一种有效的方法,但它可以工作。根据从ajax调用中得到的响应,我使用

window.location.href='${createLink(controller='user',action='login')}'


谢谢cdeszaq的提示。我真的很感激。

这是一个Ajax-y应用程序,还是整个页面都被重新加载以执行相关的用户操作?是的,每次单击浏览器页面都会发出一个Ajax调用来检索数据。您应该看一下:我从Ajax调用中得到的响应/数据是登录的内容。gsp,所以我尝试了$(document).html(data),但它进入了一个无限循环,我的浏览器崩溃了。(我知道这不是正确的方法:(正在寻找一个快速修复)。有没有办法从javascript重定向到gsp页面
    "/$controller/$action?/$id?"{
        constraints {
            // apply constraints here
        }
    }

    "/"(action:"file", controller: "explorer")  
    "500"(view:'/error')
}