Filter ,Interceptor,AOP

一.Filter:

    Filter也称之为过滤器,它是Servlet技术中比较激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。

    1.Filter简介:

      Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter。通过Filter技术,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截。简单说,就是可以实现web容器对某资源的访问前截获进行相关的处理,还可以在某资源向web容器返回响应前进行截获进行处理。

    2.配置与应用: filter是与servlet绑在一起的,所以一般filter的配置直接是在web.xml中

      

<filter>
    <filter-name>Demo1Filter</filter-name>
    <filter-class>com.itheima.filter.Demo1Filter</filter-class>
    <init-param>
        <param-name>param1</param-name>
        <param-value>value在这里呢</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>Demo1Filter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher> <!-- 没有配置dispatcher就是默认request方式的 -->
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>ERROR</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
</filter-mapping>

  

二.Interceptor :主要讲spring mvc interceptor

    参考http://haohaoxuexi.iteye.com/blog/1750680

    注意 ,我曾经试过,获得被拦截方法的一些参数,但是通过methodParaters无法获得,后来只能通过request.getParameter(..)来获取。另外,请注意文章中postHandle和afterCompletion的执行时间点

spring mvc中的interceptor配置:

    

<mvc:interceptors>
		<mvc:interceptor>
			<mvc:mapping path="/**" />
			<bean class="Interceptor.LogInterceptor" />
		</mvc:interceptor>
	</mvc:interceptors>

  

三.Filter与Interceptor的区别:

  1.filter基于filter接口中的doFilter回调函数,interceptor则基于Java本身的反射机制

  2.filter是依赖于servlet容器的,没有servlet容器就无法回调doFilter方法,而interceptor与servlet无关

  3.、filter的过滤范围比interceptor大,filter除了过滤请求外通过通配符可以保护页面、图片、文件等,而interceptor只能过滤请求,只对action起作用,在action之前开始,在action完成后结束(如被拦截,不执行action);

  4.、filter的过滤范围比interceptor大,filter除了过滤请求外通过通配符可以保护页面、图片、文件等,而interceptor只能过滤请求,只对action起作用,在action之前开始,在action完成后结束(如被拦截,不执行action);

  5.interceptor可以访问action上下文、值栈里的对象,而filter不能;

  6.在action的生命周期中,拦截器可以被多次调用,而过滤器只能在容器初始化时被调用一次。

四.Interceptor 与spring AOP的区别

  1.spring Interceptor也是一种aop思想,我们这里面的spring AOP主要是讲aop应用,interceptor 的使用场合比aop小很多,顾名思义,它是拦截一些action请求,但是比aop使用起来简便,而且session信息能够获得,符合分层的设计,所以个人优先使用interceptor.

  2.Interceptor可以阻止代码执行下去,当preHandle返回false,那么这个请求就到此结束,真正的被拦截了,但是aop不能,它只是单纯的切入添加操作

  3.aop使用的动态代理,而interceptor基于反射机制。所以,aop的proceedingJoinPoint能够提供更多的参数

  4.aop能够控制被拦截方法的执行时间,即什么时候执行,但是必须要执行,一般都是在@Around advice中。

  5.aop的pointcut也就能够让它更灵活的去做一些切面工作,同时,非请求的方法,只能使用aop。

  

时间: 2024-10-09 14:11:24

Filter ,Interceptor,AOP的相关文章

Spring AOP With AspectJ

一.AOP和拦截器 某些情况下,AOP和拦截器包括Filter能够实现同样的功能,一般都是请求即controller层的操作,这三个执行顺序为Filter>Interceptor>AOP,当然这里面的区别我会重新写一篇文章讲解,这里面提一下就是想告诉大家,不一定要使用AOP,个人感觉用Filter和Interceptor实现的更方便简单一点. 二.AOP 准备 在spring框架下,你还需要添加aspectjrt,aspectjweaver和cglib 的相关jar包,maven项目的pom.

使用SpringMVC开发Restful API(2)-使用Filter、Interceptor对请求进行拦截和处理拦截顺序

一 使用Filter拦截请求: 1.使用Filter拦截只需要我们定义一个类并实现javax.servlet.Filter接口,然后将其注册为bean即可. 示例: import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; im

过滤器(Filter)与拦截器(Interceptor )区别

目录 过滤器(Filter) 拦截器(Interceptor) 拦截器(Interceptor)和过滤器(Filter)的区别 拦截器(Interceptor)和过滤器(Filter)的执行顺序 拦截器(Interceptor)使用 过滤器(Filter)使用 拦截器(Interceptor)和过滤器(Filter)的一些用途 demo 总结 参考资料 正文 回到顶部 过滤器(Filter) Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,

spring mvc DispatcherServlet详解之interceptor和filter的区别

首先我们看一下spring mvc Interceptor的功能及实现: http://wenku.baidu.com/link?url=Mw3GaUhCRMhUFjU8iIDhObQpDcbmmRy_IPeumazg0ppnbmwqFUtLp9kSpuPPpeysf6EnHBLYFeWrbjqMq8BlWKQz_7MSDhGQTVl32fpxCMm SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理,其他的作用比如通过它

Spring AOP 实现写事件日志功能

什么是AOP?AOP使用场景?AOP相关概念?Spring AOP组件?如何使用Spring AOP?等等这些问题请参考博文:Spring AOP 实现原理 下面重点介绍如何写事件日志功能,把日志保存到数据库中. 事件日志是与主业务功能无关的逻辑,用AOP实现是再好不过了,其中因为有些数据库日志表中的字段参数需要传递,所以会用到自定义注解,将这些参数用自定义注解传递过来. 1.自定义注解Operation package com.jykj.demo.filter; import java.lan

spring 基本操作总结主要是aop以及依赖注入的基本配置

一所需架包 spring commom-logging.jar  spring.jar 注解 common-annotation.jar aop面向切面 aspectjrt.jar    aspectjweaver.jar  cglibb-nodep.ja(权限带代理proxy) jdbc database common-pool.1.6.jar common-dbhp.jar mysql-connector-bin-*.*.*.jar 二 配置文件的模板beans.xml <?xml vers

Java Web 基础 --- Filter 综述

摘要: 伴随J2EE一起发布的Servlet规范中还包括一个重要的组件--过滤器(Filter).过滤器可以认为是Servlet的一种加强版,它主要用于对用户请求进行预处理以及对服务器响应进行后处理,是个典型的处理链.Servlet规范使用了三个接口对过滤器进行了抽象,即Filter是对具体过滤器的抽象,FilterChain是基于AOP理念对责任链方面的抽象,FilterConfig则是对Filter配置的抽象.本文概述了Filter的提出动机.工作原理.使用流程和应用实例,并指出Java W

07_Flume_regex interceptor实践

实践一:regex filter interceptor 1.目标场景 regex filter interceptor的作用: 1)将event body的内容和配置中指定的正则表达式进行匹配2)如果内容匹配,则将该event丢弃3)如果内容不匹配,则将该event放行 2.Flume Agent配置文件 # 01 define agent name, source/sink/channel a1.sources = r1 a1.sinks = k1 a1.channels = c1 # 02

[Spring] Aspect Oriented Programming with Spring | AOP | 切面 | 切点

使用Spring面向切面编程 1.介绍 AOP是OOP的补充,提供了另一种关于程序结构的思路. OOP的模块化的关键单位是 类 . AOP的则是aspect切面. AOP 将程序的逻辑分成独立的块(叫做concern 重心,关注点). AOP是用来增加跨切重心(cross-cutting concerns)的模块化的. A cross-cutting concern 是一个可以影响整个程序的concern ,应该尽可能地在代码的某个位置中心化. 例如:事务管理,授权,登录,日志,安全等. 2.为