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

struts2拦截器(Interceptor)与传统拦截器(Filter)

阅读更多

Filter
    该过滤器的方法是创建一个类XXXFilter实现此接口,并在该类中的doFilter方法中声明过滤规则,然后在配置文件web.xml中声明他所过滤的路径
    <filter>
        <filter-name>XXXFilter</filter-name>
        <filter-class>
            com.web.util.XXXFilter
        </filter-class>
    </filter>
    
    <filter-mapping>
        <filter-name>XXXFilter</filter-name>
        <url-pattern>*.action</url-pattern>
    </filter-mapping>

Interceptor 
     该过滤器的方法也是创建一个类XXXInterceptor实现此接口,在该类中intercept方法写过滤规则,不过它过滤路径的方法和Filter不同,它与strut.xml结合使用,
   创建一个strus.xml的子配置文件struts-l99-default.xml,它继承与struts2的struts-default,此配置文件是其他子配置文件的父类,只要是继承与该文件的配置文件所声明的路径都会被它过滤 如下
 <package name="XXX-default" namespace="/" extends="struts-default">
        <interceptors>
            <interceptor name="authentication" class="com.util.XXXInterceptor" />
            
            <interceptor-stack name="user">
                <interceptor-ref name="defaultStack" />
                <interceptor-ref name="authentication" />
            </interceptor-stack>

            <interceptor-stack name="user-submit">
                <interceptor-ref name="user" />
                <interceptor-ref name="token" />
            </interceptor-stack>

            <interceptor-stack name="guest">
                <interceptor-ref name="defaultStack" />
            </interceptor-stack>

            <interceptor-stack name="guest-submit">
                <interceptor-ref name="defaultStack" />
                <interceptor-ref name="token" />
            </interceptor-stack>

        </interceptors>
        <default-interceptor-ref name="user" />
   </package>
 比较一,filter基于回调函数,我们需要实现的filter接口中doFilter方法就是回调函数,而interceptor则基于java本身的反射机制,这是两者最本质的区别。
 比较二,filter是依赖于servlet容器的,即只能在servlet容器中执行,很显然没有servlet容器就无法来回调doFilter方法。而interceptor与servlet容器无关。
 比较三,Filter的过滤范围比Interceptor大,Filter除了过滤请求外通过通配符可以保护页面,图片,文件等等,而Interceptor只能过滤请求。
 比较四,Filter的过滤例外一般是在加载的时候在init方法声明,而Interceptor可以通过在xml声明是guest请求还是user请求来辨别是否过滤 


另外:
任何通过Struts,或是JSF的Controller Servlet处理的request,都会在过滤器中先行处理(filter),才把控制权交还给Struts或是JSF,这时interceptor才起作用。注意这个顺序使用一种通俗的方式来讲是:filter在进入网页时选择,interceptor在提交业务过程中进行拦截,来加入需要的另外加入的业务逻辑。

常用的Filter,就是解决字符集问题的,如果在每个Servlet里都写request.setCharacterEncoding("UTF-8")太麻烦了,所以用个Filter,在Filter里写request.setCharacterEncoding("UTF-8"),

struts2 是用filter来做中心控制器。

 

 

 

首先,FILTER是基于request,respone的http过滤器,这个过滤器的好处在于能够对每一个请求都能拦截并对请求进行转发,在转发过程中对请求的合法性做出自定义的响应,对于一个空白的页面,如果用户没有获得授权,在filter的拦截下将无法访问。在使用过程中,我个人对filter的使用倾向是作为系统“外壳”,因为当一个未得到授权的用户,任何页面的访问都是存在威胁,作为权限控制中自定义的filter可以作为项目应用的底层模块。

 

对于struts2的默认拦截器,其实本身也是filter,只不过它是基于struts2的Filterdispatcher的子拦截器,必须认识到的是,这个拦截器在权限控制中,只能作为上层权限控制的补充,因为它只能为action提供拦截,对于其他页面的访问无法做出拦截与响应,在应用中应该是后台管理模块的强力补充。

分享到:
评论

相关推荐

    struts2 拦截器

    Struts2的拦截器是基于Java的Servlet Filter机制实现的,但是更加强大和灵活。 2. **拦截器链**:在Struts2中,多个拦截器可以形成一个拦截器链,每个拦截器按照定义的顺序依次执行。如果所有拦截器都允许Action...

    使用struts2拦截器对登陆权限验证

    在Struts2中,拦截器(Interceptor)扮演着至关重要的角色,它允许开发者在动作执行前后插入自定义逻辑,如日志记录、权限验证等。在本案例中,我们将深入探讨如何使用Struts2拦截器实现登录权限验证,同时结合...

    struts2拦截器原理

    Struts2 拦截器是基于Java的Servlet Filter设计模式的一种实现,它提供了一种在Action执行前后插入额外逻辑的方式。拦截器是Struts2框架的核心组件之一,用于增强应用的功能,比如权限验证、日志记录、数据校验等。 ...

    Struts2_interceptor_和_filter区别

    标题和描述均聚焦于“Struts2_interceptor_和_filter区别”,这暗示着对比和解析Struts2框架中拦截器(Interceptor)与过滤器(Filter)的差异是本文的核心议题。接下来,我们将深入探讨这两者在功能、实现方式以及...

    struts2拦截器

    - 在 Struts2 中,拦截器的工作方式类似于过滤器(Filter),但更面向业务逻辑。它们按照预定义的顺序组成一个拦截器栈,当请求到达Action时,会逐个执行这些拦截器。 2. **拦截器的配置** - 在 `struts.xml` ...

    简单理解Struts2中拦截器与过滤器的区别及执行顺序

    Struts2 中拦截器与过滤器的区别及执行顺序 Struts2 中的拦截器(Interceptor)和过滤器(Filter)是两个不同的概念,虽然它们都可以影响请求的处理过程,但它们的作用域、执行顺序和实现机制都有所不同。 拦截器...

    Struts 2 过滤器和拦截器的区别

    ### Struts 2 过滤器与拦截器的深入解析 #### 一、概述 在Struts 2框架中,过滤器(Filter)和拦截器(Interceptor)都是用于处理请求的关键组件,但它们之间存在本质的区别。正确理解这些差异有助于开发者更高效地...

    模拟Struts2拦截器代码

    在Struts2中,过滤器(Filter)虽然与拦截器有相似的作用,但它们是基于Servlet API的,通常用于处理HTTP请求的预处理和后处理,如登录检查、字符编码转换等。过滤器通过实现`javax.servlet.Filter`接口并在`web.xml...

    Struts2拦截器详解源码

    与Servlet规范中的Filter相比,虽然两者都用于处理请求,但拦截器在Struts2中具有独立的生命周期和更灵活的调用顺序管理。 4.1.1 拦截器的调用时机与流程 拦截器的调用主要由`...

    struts2拦截器的使用

    拦截器的工作原理类似于过滤器(Filter),但它们是基于Struts2的内置机制,更加灵活且易于配置和扩展。 ### Struts2拦截器的生命周期 当一个请求到达Struts2框架时,会经过以下流程: 1. **拦截器栈**:首先,...

    struts2拦截器一些用法

    拦截器可以看作是一种特殊的过滤器(Filter),但与传统的Servlet过滤器相比,它更加轻量级,并且能够更好地与Struts2框架集成。 #### 二、拦截器的工作原理 1. **加载配置**:当应用程序启动时,Struts2会读取...

    自定义拦截器struts2源代码

    记得检查`web.xml`中的`filter`和`filter-mapping`配置,它们是Struts2与请求交互的关键部分。 总之,自定义Struts2拦截器是一项强大的技术,可以增强应用程序的控制和扩展性。通过分析提供的源代码,你可以深入...

    Struts2编写的通用(拦截器,过滤器)Filter

    拦截器的实现通常包括创建一个自定义拦截器类,该类继承自`org.apache.struts2.interceptor.BaseInterceptor`或实现`Interceptor`接口,并在`intercept()`方法中编写业务逻辑。 **过滤器(Filter)** 过滤器是...

    struts2工作原理及拦截器和过滤器

    Struts2 工作原理及拦截器和过滤器 Struts2 框架的工作原理可以分为以下几个步骤: 1. 客户端发出一个指向 Servlet 容器的请求(Tomcat); 2. 这个请求会经过几个过滤器,最后会到达 FilterDispatcher 过滤器。...

    struts过滤器(拦截器)程序.zip

    在Struts2中,过滤器(Filter)和拦截器(Interceptor)是实现业务逻辑控制和增强功能的重要机制。下面将详细阐述这两个概念以及它们在实际项目中的应用。 首先,过滤器在Servlet容器中扮演着预处理请求和后处理...

    struts03:拦截器、过滤器与拦截器的区别、文件上传

    本文将深入探讨Struts框架中的拦截器(Interceptor)以及它与过滤器(Filter)的区别,并结合文件上传功能进行讲解。 1. 拦截器与过滤器的概念 - **拦截器**:在Struts2框架中,拦截器是基于AOP(面向切面编程)的...

    struts拦截器介绍

    在Struts2中,拦截器(Interceptor)是一个至关重要的概念,它扮演着处理请求、增强功能和控制流程的角色。拦截器是在Action调用前后执行的一系列方法,它们按照特定的顺序组成一个链,可以对请求进行拦截、处理并...

    拦截器和控制器的区别

    2、拦截器不依赖于servlet容器,通过动态代理实现,过滤器依赖于servlet容器 3、拦截器在方法前后,异常前后等调用,而过滤器只能在请求前和请求后各调一次。 4、拦截器可以利用依赖注入,因此在spring框架程序中,...

    java过滤器、监听器拦截器原理个人总结.pdf

    Struts2 拦截器的实现原理相对简单,当请求 Struts2 的 action 时,Struts 2 会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表,最后一个一个地调用列表中的拦截器。 Struts2 规定用户自定义...

Global site tag (gtag.js) - Google Analytics