`

Grails WEB层 过滤器

阅读更多

 

6.6 过滤器

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

 

6.6.1 应用过滤器

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

 

class ExampleFilters {
   def filters = {
        // your filters here
   }
}

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

 

sampleFilter(controller:'*', action:'*') {
  // interceptor definitions
}

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

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

过滤器的一些示例包括:

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

 

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

}

  • 只适合BookController

 

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

}

  • 适合一个URI空间

 

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

}

  • 适合所有的URIs

 

allURIs(uri:'/**') {

}

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

6.6.2 过滤器(Filters)类型

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

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

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

 

class SecurityFilters {
   def filters = {
       loginCheck(controller:'*', action:'*') {
           before = {
              if(!session.user && !actionName.equals('login')) {
                  redirect(action:'login')
                  return false
               }
           }

} } }

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

6.6.3 变量与作用域

过滤器支持所有在 控制器(controllers)标签库 中可用的属性,附加application context :

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

  • redirect - 重定向到其他的控制器(controller)和操作(action)
  • render - 渲染自定义响应 
分享到:
评论
1 楼 tangjianyi 2011-08-24  
有木有例子啊,我写的过滤器为何只在系统启动时执行了,当有请求时却一直不执行

相关推荐

    Grails 的过滤器(Grails Filters)

    NULL 博文链接:https://nainse.iteye.com/blog/408721

    使用Grails快速开发Web应用

    Grails开发Web应用的入门建立兴趣的最佳教程。

    grails快速开发web

    grails快速开发web.pdf

    Grails企业web应用开发与部署.pdf

    Grails企业web应用开发与部署.pdf 很好的资源

    Grails技术精解与Web开发实践.part2

    自己买的书,然后用扫描机扫描的,整个文件太大了,不能一次性上传上来,所以拆成3个part。 我自己学grails很想看这本书,结果网上没有,就自己去买了,然后共享给需要的人。 如果有什么问题请联系我下架。

    Grails技术精解与Web开发实践.part1

    自己买的书,然后用扫描机扫描的,整个文件太大了,不能一次性上传上来,所以拆成3个part。...我自己学grails很想看这本书,结果网上没有,就自己去买了,然后共享给需要的人。 如果有什么问题请联系我下架。

    Grails企业web应用开发与部署

    关于grails企业web开发环境和部署的一些经验,和大家分享。

    GrailsWeb应用框架grails-core

    Grails Web 应用框架:grails-core

    Grails Grails Grails

    Grails Grails Grails Grails Grails

    Grails 1.1 Web Application Development

    Grails 1.1 Web Application Development.pdf

    grails开发

    grails开发关于grails入门指南的例子进行分析

    Grails+快速开发+Web+应用程序.pdf

    本教程介绍 Grails,这是一个搭建在动态语言 Groovy 之上的开源 MVC 快速 Web 开发框架。使用 Grails 可以提高 Web 开发的效率,降低 Web 开发的复杂度。本文 从 Grails 自动生成代码入手,以示例为中心逐步增加深度...

    Grails——web开发应用

    本文主要介绍如何运用Grails框架进行快速Web应用开发。文章首先简单介绍了Grails框架开发环境;然后,在分析GrailsMVC模式实现和自适应考试系统原理的基础上,采用用例分析技术和领域模型驱动模式,基于Grails框架设计...

    使用 Grails 快速开发 Web 应用程序

    Grails入门好资料

    Grails1.1中文文档

    Grails建立在这些概念之上,它极大地降低了在Java平台上建立Web应用的复杂性。与那些框架不同的是,Grails是构建在现有的像Spring、Hibernate这样的Java技术之上。 Grails是个一栈式开发框架,它尝试通过核心技术...

    使用Grails快速开发Web应用.rar

    易于使用的基于Hibernate的对象-关系映射(ORM)层称为Groovy Server Pages (GSP)的表现层技术基于Spring MVC的控制器层构建于Gant 上的命令行脚本运行环境内置Jetty服务器,不用重新启动服务器就可以进行重新加载利用...

    Grails 教程

    基于Spring MVC的控制器层 构建于Gant 上的命令行脚本运行环境 内置Jetty服务器,不用重新启动服务器就可以进行重新加载 利用内置的Spring 容器实现依赖注入 基于Spring的MessageSource核心概念,提供了对国际化...

    Grails技术精解与Web开发实践.part3

    自己买的书,然后用扫描机扫描的,整个文件太大了,不能一次性上传上来,所以拆成3个part。 我自己学grails很想看这本书,结果网上没有,就自己去买了,然后共享给需要的人。 如果有什么问题请联系我下架。

    Grails权威指南 Grails权威指南

    Grails权威指南Grails权威指南Grails权威指南Grails权威指南Grails权威指南Grails权威指南

Global site tag (gtag.js) - Google Analytics