beforeInterceptor在action (操作)被执行前进行数据处理拦截 . 假如它返回 false,那么 ,被拦截的action (操作)将不会被执行.
拦截器可以像下面这样被定义为拦截一个controller(控制器)中所有的action (操作):def beforeInterceptor = {
println "Tracing action ${actionUri}"
}
上面是在controller(控制器)定义主体内被声明. 它会在所有 action(操作)之前被执行,并且不会干扰数据处理.
一个普通的使用情形是为了验证:def beforeInterceptor = [action:this.&auth,except:'login']
// defined as a regular method so its private
def auth() {
if(!session.user) {
redirect(action:'login')
return false
}
}
def login = {
// display login page
}
上面的代码定义了一个名为auth的方法. 使用一个方法,是为了让它不会作为一个action(操作)而暴露于外界(即. 它是private).
随后,beforeInterceptor 定义用于’except’login actions(操作)之外的所有 actions(操作)的拦截,并告知执行’auth’ 方法. ‘auth’ 方法是使用Groovy的方法指针语法来引用 ,在方法内部,它自己会检测是否一个用户在session(会话)内,否则,重定向到 login action(操作) 并返回 false, 命令被拦截的actions(操作)不被执行 .