我有一個過濾器設置如下來控制用戶登錄狀態。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版本升級到該項目,因爲它被置於維護模式。我的臨時解決方案是在每個控制器方法的頂部添加檢查。醜陋,但它完成了工作。 –