Grails 1.1 Web层 - Controller(控制器) 拦截器 - Before 拦截器

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(操作)不被执行 .