我有一个过滤器设置如下来控制用户登录状态。Grails过滤器停止工作后
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 )无论如何都会执行。
我似乎可以找到奇怪行为的原因。
我的问题是有人看到过这种行为之前,他们是如何解决它或有任何想法在哪里寻找可能的原因突然改变过滤器的工作方式。
在此先感谢。
UPDATE(2014年2月19日): 在努力追捕导致过滤器并没有在if(!session.user.isAgent)执行的代码添加更多的日志记录,因为它是后做之前。现在它运行正常,然后只执行渲染线,当用户没有登录时。日志记录仍然显示用户已经登录并且他是代理,但是它运行渲染而不是上面的代码。这是因为如果有一个“转到”渲染线在完成代理是否登录后检查。
同样的任何信息或解决方案,将不胜感激
经过进一步的研究,我认为这可能是在2.3版本中解决的一个错误,但不幸的是我无法将grails版本升级到该项目,因为它被置于维护模式。我的临时解决方案是在每个控制器方法的顶部添加检查。丑陋,但它完成了工作。 –