spring过滤器

什么是过滤器

        Spring 中不能处理用户请求,但能够用来提供过滤做用的一种Servlet规范。在请求进入容器以后,还未进入Servlet以前进行预处理,而且在请求结束返回给前端这之间进行后期处理。具体则是经过截取用户端的请求与响应信息,并对之进行过滤,即在Servlet被调用以前检查Request对象,修改Request Header和Request内容;在Servlet被调用以后检查Response对象,修改Response Header和Response内容。前端

过滤器做用

       过滤器也能起到拦截请求并做出相应的行动。好比: 能够进行(BA)认证过滤,登录过滤等。java

过滤器实现方式

       经过实现Filter接口,也能够经过实现AbstractFilter抽象类。web

Filter接口  展开原码

init

     初始化操做,FilterConfig用来获取web.xml中关于初始化的配置(init-param)。spring

doFilter

    完成实际的过滤操做, 当客户请求访问与过滤器关联的URL时,Servlet容器将先调用过滤器的doFilter方法。FilterChain参数用于访问后续过滤器。服务器

destroy

过滤器销毁时被调用, 即释放过滤器占用的资源。app

注意事项: 同一个Url定义多个过滤器时,服务器会按照定义前后顺序组成过滤器链,前后执行filter的doFilter方法。ide

过滤器和拦截器对比

 
过滤器(Filter)
拦截器(Interceptor)
原理 基于函数回调 基于java的反射机制
是否依赖Servlet容器
是否能访问action上下文、值栈里的对象
在action的生命周期中,是否屡次被调用 否,仅在容器初始化时被调用一次
拦截范围 全部请求 仅能对action请求
是否能够获取Ioc容器中的各个bean(是否属于Spring的组件) 是,在拦截器里注入一个service,便可以调用业务逻辑。
使用范围不一样 只能用于Web程序中 不只能用于Web中,也能够用于Application、Swing程序中
规范不一样 Servlet容器支持的 Spring容器支持的
深度不一样 Servlet先后 深刻到方法先后、异常抛出先后

过滤器和拦截器执行顺序图

 

 

 

相关连接:函数

Spring学习——过滤器学习

相关文章
相关标签/搜索