我是 Grails 的新手,正在开发一个只有 2 个控制器的项目,一个用于登录,另一个用于资源管理器(类似于 Windows 资源管理器,左侧面板显示树状结构,右侧将文件夹内容显示为桌子)
当用户访问应用程序时,应用程序按预期工作,如果用户尚未登录,则显示登录屏幕,如果他已登录,则显示资源管理器屏幕。
但是会话超时情况并非如此:假设会话超时并且用户单击资源管理器屏幕右侧面板中的链接,然后登录屏幕将显示在右侧面板中。
我正在使用 SecurityFilter 重定向到登录屏幕。
SecurityFilters.groovy
def 过滤器 = {
loginCheck(controller:'*', action:'*') {
before = {
if (!session.idpuser && actionName != "login") {
redirect(controller: "user", action: "login")
return false
}
}
}
}
用户控制器.groovy
定义登录(){
if (request.get) {
return false
}
......
redirect(controller: "explorer", action: "file")
}
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 中的模板。但我不知道如何解决它:(
如果有人可以帮助我解决这个问题,我将不胜感激。请帮忙!!!!!