Grails WEB层过滤器- justjavac(风之谷) - JavaEye技术网站

?

尽管Grails支持良好的细粒度,但只对少数控制器(controller)的应用时非常有用,当管理大型应用时就会变得很困难。另一方面,过滤器能横跨一群控制器(controller),一个URI空间或一个具体的操作(action)。过滤器对插件更容易并能保证彻底的分离主要控制器(controller)逻辑,有利于所有像安全,日志等等这样的横切关注点 .

?

为了创建一个过滤器,可在 grails-app/conf 下创建一个以规约 Filters 结尾的类。在这个类中,定义一个名为 filters 的代码块,它包含了过滤器的定义 :

?

每个在filters块中定义的过滤器(Filters)拥有一个名字和一个作用域。名字是方法的名字,作用域使用命名参数来定义。例如,假如你需要定义一个应用于所有控制器(controller)和操作(action)的过滤器(Filters)可以使用通配符 :

?

过滤器的作用域可以是下面之一:

  • 具有通配符的一个控制器(controller)和/或操作(action)名字对
  • 具有Ant路径匹配语法的一个URI

过滤器的一些示例包括:

  • 所有控制器(controller)和操作(action)

?

  • 只适合BookController

?

  • 适合一个URI空间

?

  • 适合所有的URIs

?

另外,这个次序决定了你所定义的过滤器的执行次序.

在过滤器的主体内,你可以定义下列过滤器(Filters)的拦截器类型之一:

  • before - 操作(Action)之前执行. 返回false来指示后续的控制器(controller)和操作(action)不会被执行
  • after - 操作(Action)之后执行. 获取{dy}参数作为视图模型
  • afterView - 视图渲染之后执行

例如,为实现普通身份验证,可以定义如下过滤器(Filters):

?

这里的loginCheck过滤器(Filters)使用一个before拦截器来执行代码块,检查是否一个用户在session内,假如不是,重定向到login操作(action)。注意,如何返回false确保操作(action)本身不被执行 .

过滤器支持所有在 和 中可用的属性,附加application context :

  • - HttpServletRequest对象
  • - HttpServletResponse对象
  • - HttpSession对象
  • - ServletContext对象
  • - flash对象
  • - 请求参数对象
  • - 被分配的action名
  • - 被分配的controller名
  • - 当前运行的Grails应用程序
  • - ApplicationContext对象

不过,过滤器只支持用于控制器(controller)和标签库方法的子集 。这些包括:

  • - 重定向到其他的控制器(controller)和操作(action)
  • - 渲染自定义响应?
郑重声明:资讯 【Grails WEB层过滤器- justjavac(风之谷) - JavaEye技术网站】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——