我写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框架似乎能够在引擎盖下创建相当多的魔法,所以我认为这可能值得提问。