`
Jcat
  • 浏览: 50124 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Grails中的过滤器(Filter)和拦截器(Interceptor)

阅读更多
先摘录一段Java中两者的区别
1、拦截器是基于java的反射机制的,而过滤器是基于函数回调 。
2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器 。
3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用 。(这也就是为什么在Grails文档里,拦截器属于Controlloer章节的一个小节;而过滤器自己是一个章节
4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能 。
5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次 。

Grails的文档是这样描述的
If your interceptor is likely to apply to more than one controller, you are almost certainly better off writing a Filter. Filters can be applied to multiple controllers or URIs without the need to change the logic of each controller
所以,对于登陆验证,filter更加适合,默默的、悄悄的,减少继承。
interceptor更加适合处理一个controller内的特殊情况。



拦截器
abstract class BaseController {  //需要验证的Controller继承之
    def beforeInterceptor = [action: this.&auth, except: ['login']]

    private def auth() {
        if (!session.loginUser) {
            redirect(controller: 'user', action: 'login')
            return false
        }
    }
}

过滤器
grails create-filters security

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

有趣的测试,如果同时设置了拦截器和过滤器,过滤器(是容器级的)工作在拦截器(Controller级的)之前。


补充一个遇见的bug
可以绕开
loginCheck(controllerExclude:'sample',actionExclude:'createAdmin')
可以绕开
loginCheck(uriExclude:'/user/login')
可以绕开/user/login,但是/sample/createAdmin绕不开。。。
loginCheck(controllerExclude:'sample',actionExclude:'createAdmin', uriExclude:'/user/login')

其实是因为目前的bug,说是Grails 2.3的时候能解决
http://jira.grails.org/browse/GRAILS-3137?actionOrder=desc
Multiple URI Filters in form of a list don't work anymore (since 1.0.3)
推测:controller, action最终都会被转化为uri的形式,所以就出现两个URI了,就调入bug了。
2
1
分享到:
评论

相关推荐

    Grails 的过滤器(Grails Filters)

    在 Grails 应用中,过滤器(Filters)是一个重要的概念,它们允许开发者在执行控制器操作之前或之后执行某些逻辑,从而实现诸如身份验证、日志记录、数据验证等跨控制器的功能。 ### 1. 过滤器的概念 过滤器是 ...

    Grails 中文参考手册

    《Grails 中文参考手册》是一本全面介绍Grails框架的指南,旨在帮助开发者快速上手并深入理解Grails的各个核心概念和技术。Grails是一个基于Groovy语言的开源Web应用框架,它提供了高效的开发环境和强大的功能,使得...

    Grails中文参考手册

    "Grails 中文参考手册" 是一套详细的 Grails 学习资料,涵盖了框架的所有核心组件、最佳实践和使用方法,帮助开发者快速掌握 Grails 开发技能。 总之,Grails 是一个强大而灵活的 Web 开发框架,结合 Groovy 的优点...

    grails中文参考手册

    - **Hello World示例**:在新创建的应用中,你可以通过创建一个简单的控制器和视图来实现经典的“Hello, World!”程序,体验Grails的快速开发能力。 3. **使用IDE** Grails支持多种集成开发环境(IDE),如...

    Grails Grails Grails

    Grails的控制器通过拦截器链进行扩展,可以添加自定义的行为和过滤逻辑。 **Grails 的核心特性** 1. **自动化配置和约定优于配置**:Grails 提供了许多默认配置,例如数据库连接、URL映射等,开发者只需按照约定...

    grails中文入门简介

    在Web层的开发中,Grails提供了灵活的控制器来处理请求和响应。它还包含了Groovy Server Pages(GSP),这是一种基于Groovy的模板引擎,它允许开发者在页面中使用Groovy脚本。GSP标签库丰富,涵盖了数据绑定、表单...

    grails 中文第二版

    - 支持控制器拦截器,用于实现通用的逻辑,如权限检查。 - 支持数据绑定,自动将HTTP请求参数映射到控制器操作的参数上。 - 支持XML和JSON响应,便于构建RESTful服务。 - 支持JSONBuilder,提供了一种简洁的方式来...

    grails中文API

    本文将深入解析Grails中文API中的关键概念和技术点。 1. **Grails框架概述** Grails是基于Spring框架构建的,它整合了Groovy语言的强大功能和Java生态系统的优势。Grails遵循MVC(Model-View-Controller)设计模式...

    grails 中文文档+grails-fckeditor-0.9.5.zip插件

    FCKEditor是一款著名的在线文本编辑器,grails-fckeditor-0.9.5插件则是将其集成到Grails应用中的解决方案。以下是关键点: 1. 安装与配置:在Grails项目中添加插件依赖,然后通过配置文件调整编辑器的参数,如默认...

    Grails1.1中文文档

    2. **命令行工具**:Grails提供了强大的命令行工具,可以快速生成项目结构、控制器、服务、域类等,这在文档中会有详细介绍,包括`create-app`、`generate-controller`等命令的用法。 3. **领域驱动设计(Domain-...

    Grails1.1中文文档(CHM)

    Grails1.1最新 中文 文档 当今的Java Web开发技术显得过于复杂,相对于它本身的需要来说。现在主流的Java Web框架也是异常复杂,而且没有很好的遵循 Don't Repeat Yourself (DRY) 法则。 因此我们要以一种新的思维...

    Grails入门指南中文第二版.pdf

    8. **Grails过滤器(Filters)**:过滤器在应用程序中的应用,如何在特定的HTTP请求或响应之前/之后执行代码。 9. **Grails视图(Views)**:使用GSP(Groovy Server Pages)进行页面渲染,理解标签库(Tag Libs)...

    grails中的上传,下载

    3. **设置响应头**:在控制器方法中,设置`Content-Disposition`头,指明下载的文件名和类型。 4. **输出文件**:将文件内容输出到HTTP响应流中,客户端接收到后会根据响应头的信息触发下载行为。 ### 注意事项 - *...

    grails中文文档

    提供的 "Grails1.1中文文档-----2009.3.25.chm" 和 "Grails.zip" 文件,应该包含了 Grails 1.1 版本的中文文档和可能的示例代码。这些文档可以帮助你深入了解 Grails 的各项特性和使用方法,特别是对于初学者来说,...

    Grails 和 jQuery开发实例

    在本文中,我们将深入探讨如何使用Groovy on Grails(简称Grails)和jQuery来构建一个功能丰富的Web日历应用程序。Grails是一个基于Java平台的全栈式框架,它简化了Web应用的开发过程,而jQuery则是一款强大的...

    Grails 1.1 中文手册 chm

    Grails 最新的 v1.1版的中文文档,chm格式,Grails是一套快速开发Web应用的开源框架,基于Groovy编程语言,并构建于Spring、Hibernate和其它标准Java框架之上,能为大家带来超高效率的一站式框架。

    Grails入门精通及中文API

    在学习过程中,还可以参考在线教程、视频课程和社区论坛,如Stack Overflow和Grails官方社区,以便获取更多实践经验和帮助。 总之,Grails作为Java平台上的快速Web开发框架,以其高效、灵活和丰富的生态系统,为...

    Eclipse下搭建Grails项目

    注意,尽管Eclipse对Grails的支持相比IntelliJ IDEA和NetBeans可能稍显不足,但通过Groovy Eclipse插件的配置,开发者依然能在Eclipse中高效地进行Grails开发。不断更新插件和学习最佳实践将有助于提升开发体验。

Global site tag (gtag.js) - Google Analytics