我寫Grails中一個小的web應用,並確保所有用戶都我用下面的篩選認證從過濾器定義控制器訪問的變量:Grails中
class LoginFilters {
static filters = {
loginCheck(controller:'*', action:'*') {
before = {
if (session.user_id) {
request.user = User.get(session.user_id)
} else if (!actionName.equals("login")) {
redirect(controller: "login", action: "login")
return false
}
}
}
}
}
和所有的控制器方法開始讀取請求對象的用戶屬性:
def actionName = {
def user = request.user
...
}
上面的代碼有效,但我寧願避免所有控制器方法中的重複代碼。過濾器是否可以將用戶對象綁定到名爲「user」的變量而不是「request.user」,這可以從所有控制器訪問?
我知道可能存在一些範圍問題,這使得這種情況變得不可能,但是Grails框架似乎能夠在引擎蓋下創建相當多的魔法,所以我認爲這可能值得提問。