`
newleague
  • 浏览: 1479139 次
  • 性别: 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请求耗时

    常用拦截 拦截器HandlerInterceptor 拦截器MethodInterceptor 添加依赖 创建启动类 创建拦截器类 创建控制器 监控control请求耗时,提高性能

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

    谈到拦截器,还有一个词大家应该知道——拦截器链(Interceptor Chain,在Struts 2中称为拦截器栈Interceptor Stack)。拦截器链就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器链

    springAOP与Interceptor

    SpringAOP与SpringMVC拦截器两种方式实现权限管控,前台xml读取配置根据登录用户判断button是否enable

    Struts拦截器及token拦截器防止重复提交例子源码

    1. Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现. 2. 拦截器栈(Interceptor Stack)。Struts2拦截器栈就是将拦截器按...

    过滤器、拦截器、AOP、ControllerAdvcie的使用对比、执行顺序及代码教程的示例代码【0积分免费下载】

    过滤器、拦截器、AOP、ControllerAdvcie的使用对比、执行顺序及代码教程的文章内的示例代码,文章...通过文章和这份代码,你可以学到过滤器、拦截器、AOP、ControllerAdvcie的基本使用方式,并了解到他们的执行顺序。

    Struts2拦截器Interceptor的原理与配置实例详解

    拦截器是一种AOP(面向切面编程)思想的编程方式.它提供一种机制是开发者能够把相对独立的代码抽离出来,...下面这篇文章主要给大家介绍了关于Struts2拦截器Interceptor的原理与配置的相关资料,需要的朋友可以参考下。

    ASP.NET Core 3.0 gRPC拦截器的使用

    拦截器就像MVC的过滤器或者是ASP.NET Core middleware 一样,具有面向切面的思想,可以在调用服务的时候进行一些统一处理, 很适合在这里处理验证、日志等流程。本片文章就以记录日志为例来进行讲解。 二. ...

    struts2 拦截器写法

    Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现.

    拦截器详解

    拦截器是AOP中的概念,它本身是一段代码,可以通过定义“织入点”,来指定拦截器的代码在“织入点”的前后执行,从而起到拦截的作用。正如上面 Struts2的Reference中讲述的,Struts2的Interceptor,其拦截的对象是...

    Java中的Struts2框架拦截器之实例代码

    本文实例为大家分享了Struts2框架拦截器实例的示例代码,供大家参考,具体内容如下 在看拦截器的小例子的前我们先来看看sturts2的...拦截器interceptor体现了一种编程理念,叫做AOP(面向切面编程) 实例1:使用token

    使用Annotation和拦截器实现访问控制 (2010年)

    访问控制是Web应用系统中的主要问题之一。基于数据库和基于配置文件两种...Interceptor(拦截器)是Struts2的一个强有力的工具,用于在某个方法或字段被访问之前进行拦截,然后在之前或之后加入某些操作,它是AOP(Aspect-O

    J2EE应用开发详解

    118 8.3.5 Struts2配置文件 119 8.4 Action的配置方式 121 8.4.1 动态方法调用 121 8.4.2 设置action元素的method属性 122 8.4.3 使用通配符配置action 122 8.4.4 默认action 123 8.5 拦截器Interceptor 123 8.5.1 ...

    基于Maven构建的Spring+Hibernate+Struts2 web项目(免费提供全部源码)

    基于Maven构建的Spring+Hibernate+Struts2 web项目是一个企业级的...它的Action机制和拦截器(Interceptor)体系使得请求处理逻辑更加清晰和灵活。Struts2的标签库(Taglib)简化了JSP页面的开发,提高了视图层的开发效

    spring4学习完整demo

    开发工具IntelliJ IDEA15,maven构建工程,使用spring4.1.1,demo集成jackson传输json,hibernate-validator校验数据,mybatis数据库持久框架,拦截器interceptor,aop构建事务等,让你快速入门spring

    juhe-tencent-wzdj.zip

    springboot AOP filter interceptor 全局异常处理一网打尽,这是一般的项目基本能够使用到的

    jersey-interceptor-sample:在 Jersey 中实现事务边界的示例(使用 HK2 拦截器)

    在泽西岛实施交易边界的示例 ... 这是使用内部使用的的 AOP 函数在资源方法中设置事务边界的示例。 启动 Jersey 从gradlew run开始。 是模拟事务start-commit的示例。 是模拟事务启动-回滚的示例。 执照

    Spring_Hibernate使用TransactionInterceptor声明式事务配置.doc

    在事务拦截器中,我们可以配置不同的事务属性,例如PROPAGATION_REQUIRED、readOnly等,这些属性将被用来控制事务的行为。例如,在delete、add、update、save操作中,我们使用PROPAGATION_REQUIRED来确保事务的原子...

    Java.lang.Instrument 代理Agent使用

    java.lang.Instrument包是在 JDK5引入的,程序员通过修改方法的字节码实现动态修改类代码 。...  (1) 代理 (agent) 是在你的main方法前的一个拦截器 (interceptor),也是在main方法执行之前,执行agent的代码。 a

    java 三大主流框架

    * Interceptor:Struts2的拦截器机制,用于处理请求和响应。 * Result:Struts2的结果机制,用于处理视图层的输出。 Struts2的工作流程 Struts2的工作流程包括: 1. 用户请求到达Struts2框架。 2. Struts2框架将...

    阿里云javasdk源码-toutiao:Springboot搭建的资讯网站

    阿里云java sdk源码 toutiao 使用Spring boot编写的咨询网站 采用MVC模式,并实现前后端分离 通过myBatis和MySQL实现数据库部分...网站拦截器实现 │ │ │ ├── model // 各数据模型 │ │ │ ├── service //

Global site tag (gtag.js) - Google Analytics