0

我是 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 中的模板。但我不知道如何解决它:(

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

4

2 回答 2

0

由于这是一个基于 ajax 的站点,因此您需要在 ajax 响应处理程序中显式处理“您需要登录”响应,并在需要时强制用户进入登录页面。

于 2012-08-22T14:51:33.677 回答
0

看起来我发现该解决方案可能不是一种有效的方法,但它确实有效。根据我从 Ajax 调用中得到的响应,我使用重定向到 Login.gsp

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

谢谢 cdeszaq 的提示。对此,我真的非常感激。

于 2012-08-22T17:11:26.510 回答