Grails 的过滤器(Grails Filters)

翻 by:Nainse 2009年6月1日21:52:34

从1.0版本Grails开始把filters作为一个约定来支持,它们可以被人为编码或作为插件(plug-ins),独立于控制器(controller)来应用。
这些过滤器是按照它们被定义的顺序来执行的。

----------注意--------------
plug-ins的顺序是在load的时候确定的(In the case of plug-ins in the order in which the plug-ins load(
please clarify previous sentence)请一定弄清楚这句话的意思)。如果你想让一个filter在一个已知的以plug-in形式存在的filter执行后执
行的话,你必须用“dependsOn”属性来使该filter依赖于(depends on)另外的那个已知filter。 详见:http://www.grails.org/Plugin+Dependencies
-----------------------


开始定义Filters吧
首先在grails-app/conf目录下创建一个以Filters为后缀的groovy类文件,然后在该类里声明一个名字叫做filters的闭包(代码块),然后就可以
在该闭包内定义改filter的业务了。

class SomeNameFilters{ 
def filters = { 
//your filter here 
} 
} 

 
每一个filter都有一个名字和有效域(has a name and a scope)。名字是指filter的方法名,有效域则是按照相应的命名规则命名的参数。

myFilter(controller:'*', action:'*'){ 
// 
} 

 

有效域可以是:
1.controller和/或action与一些可选的通配符(optional wildcards)
2.URI

一些例子:

all(controller:'*', action:'*'){} 

justBook(controller:'book', action:'*'){} 

someURIs(uri:'/book/*'){} 

allURIs(uri:'/**'){} 

 
Filters 拦截器(Interceptors)

在已定义好的fiters闭包内,你可以定义一些一下的过滤拦截器:

1.before:在action之前执行,可以返回false来终止所有后续的filters和action的继续执行。
2.after:在action之后执行,被view model(视图模型)作为第一个参数调用(Called with the view model as the first arguments)
3.afterView:在render到视图(view)后执行(Excuted after view rendering)

例子:

class SecurityFilters { 
def filters = { 
loginCheck(controller:'*', action:'*'){ 
before = { 
if(params.cotroller == null){ 
redirect(action:'login') 
//当你用的是Tomcat服务器,并且controller是null的时候,你必须返回true,否则会抛出异常 
return true 
}else if(!session.user && !actionName.equals('login')){ 
redirect(action:'login') 
return false 
} 
} 
} 
} 
} 

 
Filters的动态方法/属性
Filters支持大多数的在controller和tag libraries中包含的通用属性。
requset:HttpServletRequest对象
response:HttpServletResponse对象
session:HttpSession对象
servletContext:ServletContext对象
applicationContext:ApplicationContext对象
params:请求参数对象(the request parameters object)
actinoName:正在转发的action的名字
controllerName:正在转发的controller的名字
另外,Filters还支持下面的方法:

redirect 
render 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值