【发布时间】:2014-02-18 20:34:32
【问题描述】:
我设置了一个过滤器来控制用户的登录状态。
class SecurityFilters {
def filters = {
login(controller:'login|logout|proxy|API|error', action:'*', invert: true) {
before = {
if (!session.isLoggedIn){
switch(controllerName){
case "enroll":
switch(actionName){
...
default:
log.warn "Permission Denied. Default action for enroll."
render(view: '/permissionDenied', model: [message: "You must be logged in to access the enroll system. If you are a consumer, please contact your agent for more information."])
break
}
break
...
}
else {
switch(controllerName){
case "agent":
if (!session.user.isAgent) {
render view: "/permissionDenied", model: [message: 'This portion of the site is only available to agents.']
return false
}
break
....
}// switch
}// else
}// before
...
}// login
}// filters
我遇到的问题是,当我在开发中运行它时,它运行良好,但是当我在我们的 QA 系统上运行它时,它运行了一段时间,然后突然停止正常运行。
我添加了日志记录,我可以看到过滤器中提供了会话信息,并且会话变量 (session.user.isAgent) 设置正确 (true) 但 if(!session.user.isAgent) 中的代码无论如何都会被执行。
我似乎可以找到奇怪行为的原因。
我的问题是,之前有没有人看到过这种行为,他们是如何解决的,或者对在哪里寻找过滤器工作方式突然变化的可能原因有任何想法。
提前致谢。
更新(2014 年 2 月 19 日): 在添加更多日志以寻找原因后,过滤器没有像以前那样执行 if(!session.user.isAgent) 中的代码。现在它正常运行,然后仅在用户未登录时执行渲染行。日志记录仍显示用户已登录并且(s)他是代理,但随后它运行渲染但不运行上面的代码。就好像在完成检查代理是否登录后,渲染行有一个“转到”。
再次感谢任何信息或解决方案
【问题讨论】:
标签: session grails before-filter