`
newleague
  • 浏览: 1499239 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

基于AOP设计思想的拦截器(Interceptor)与传统拦截器(Filter)的区别

 
阅读更多

现在AOP的设计开发理念在软件开发中用的越来越广泛,在我们开发的软件中也广泛进行了使用。而最常用的就是filter和interceptor。
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” />

<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请求来辨别是否过滤。

分享到:
评论

相关推荐

    Spring Boot Aspect 切面 AOP 拦截器 Interceptor 监控control请求耗时

    在Spring Boot应用中,面向切面编程(AOP)是一种强大的设计模式,它允许我们以声明式的方式插入代码,比如日志记录、事务管理或权限检查。Aspect是AOP的核心概念,它封装了关注点,使得我们可以将这些关注点与业务...

    SpringMVC的拦截器(Interceptor)和过滤器(Filter)的区别与联系

    在Java Web开发中,Spring MVC框架提供了两种机制来处理请求:拦截器(Interceptor)和过滤器(Filter)。它们都是在请求被控制器处理之前和之后执行的一系列预处理和后处理操作,但它们在功能、使用场景和工作原理...

    拦截器的使用示例Interceptor

    在Java Web开发中,拦截器(Interceptor)是一种重要的设计模式,它主要用于在请求处理之前、之后或处理过程中执行一些预定义的任务。拦截器通常被应用于MVC(Model-View-Controller)框架,如Spring MVC,Struts等...

    struts2 Interceptor拦截器

    ### Struts2 Interceptor 拦截器详解 #### 一、概述 在现代Web开发中,特别是基于Java的Web应用程序开发中,Struts2框架因其简洁性和强大的扩展能力而备受青睐。Struts2框架的核心设计理念之一是MVC(Model-View-...

    拦截器和过滤器的区别

    在现代软件开发过程中,特别是Web应用程序中,为了实现灵活高效的业务逻辑处理及控制流管理,常常会使用到两种设计模式:拦截器(Interceptor)与过滤器(Filter)。这两种技术虽然在功能上有一定的相似之处,但其...

    MyBatis拦截器:给参数对象属性赋值的实例

    在MyBatis中,拦截器通过实现`Interceptor`接口来创建。`OpeInfoInterceptor`类就是这样一个拦截器,它使用了`@Intercepts`注解来指定拦截的目标。`@Signature`注解用来精确定义拦截的方法,这里是`Executor`类的`...

    SpringAOP原理及拦截器.pdf

    拦截器(Interceptor)是AOP实现的关键,它在方法调用前后执行额外的逻辑。在Spring中,拦截器通常与通知概念一起使用,形成一个拦截器链,每个拦截器都可以在调用前后进行操作,且可以决定是否继续调用下一个拦截器...

    struts2 拦截器(AOP,面向切面编程)

    拦截器(Interceptor)是Struts2的核心特性之一,它基于AOP(面向切面编程)思想,提供了对请求处理过程的灵活控制。在本篇文章中,我们将深入探讨Struts2的拦截器机制以及AOP的概念。 **AOP(面向切面编程)**是一...

    SpringAOP原理及拦截器.doc

    Spring AOP使用拦截器(Interceptor)机制来实现通知,拦截器按照顺序形成一个链,当目标方法被调用时,会逐个执行这些拦截器。这种设计使得我们可以灵活地插入、移除和重新排列通知,而不会影响核心业务代码。 ...

    SpringMvc 拦截器

    Spring MVC的拦截器基于Servlet API的Filter和HandlerInterceptor接口,但相比Filter,Interceptor更关注于业务逻辑,更易于与Spring MVC的其他组件集成。 接下来,我们来创建一个简单的自定义拦截器。首先,我们...

    理解拦截器用于在某个方法或字段被访

    拦截器通常基于代理模式工作。当一个请求到达应用程序时,框架会根据配置的拦截器链来决定如何处理。拦截器链是由多个拦截器组成,按照特定的顺序依次执行。每个拦截器都有"before"和"after"两个阶段,即在目标方法...

    SpringAOP原理及拦截器.docx

    Spring AOP的实现主要依赖于拦截器(Interceptor)。拦截器在方法调用前后执行,形成一个拦截器链。通过定义拦截器,开发者可以定义在何时何地执行特定的逻辑,而无需直接修改原始业务代码。这极大地增强了代码的...

    Struts2拦截器及其用法详细说明

    拦截器是基于AOP(面向切面编程)思想的组件,它可以理解为在Action调用前后插入的逻辑处理。在Struts2中,这些处理逻辑被封装在独立的类中,当请求到达Action之前,拦截器会按照预定义的顺序执行,执行完后再继续...

    struts2 拦截器

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

    Interceptor与Filter的区别

    在Java Web开发中,拦截器(Interceptor)与过滤器(Filter)是两种常见的处理请求和响应的技术。它们虽然都用于在请求处理前后执行某些操作,但其实现机制、应用场景以及作用范围等方面存在较大差异。下面将详细...

    拦截器+ognl+aop

    在提供的压缩包文件“拦截器+ognl+aop”中,可能包含了一些基于这些技术的示例代码。通过学习这些示例,你可以深入理解这三者如何协同工作,以及在实际项目中如何应用它们。拦截器通常用于处理HTTP请求,OGNL用于...

    CXF3.0+Spring3.2 自定义拦截器

    1. **CXF拦截器基础**:CXF的拦截器是基于JAX-WS规范的Handler Chain模型,分为In-bound(请求进来时触发)和Out-bound(响应出去时触发)两类。拦截器可以通过在服务配置中指定,或者通过编程方式动态添加。 2. **...

    Spring拦截器,高级参数绑定

    Spring MVC中的拦截器是基于AOP(面向切面编程)原理实现的,可以理解为对Controller方法调用的预处理和后处理。下面将详细探讨Spring拦截器的使用以及高级参数绑定和Controller返回值的相关知识。 首先,我们创建...

    struts2的自定义拦截器例子

    首先,拦截器的本质是Java的面向切面编程(AOP)思想在Struts2中的体现。它们允许开发者在动作执行前后插入自定义的逻辑,例如日志记录、权限检查、事务管理等。在Struts2中,拦截器是基于责任链模式实现的,多个...

Global site tag (gtag.js) - Google Analytics