美文网首页
springboot监听器、过滤器和拦截器

springboot监听器、过滤器和拦截器

作者: jiahzhon | 来源:发表于2020-03-30 10:32 被阅读0次

监听器

  • listener就是对项目起到监听的作用,它能感知到包括request(请求域),session(会话域)和applicaiton(应用程序)的初始化和属性的变化;监听域对象的属性发生修改的事件。用于在事件发生前、发生后做一些必要的处理。其主要可用于以下方面:1、统计在线人数和在线用户2、系统启动时加载初始化信息3、统计网站访问量4、记录用户访问路径。

过滤器

  • 主要的用途是过滤字符编码、做一些业务逻辑判断、URL级别的权限控制,敏感词汇的过滤,等。只要你在web.xml文件配置好要拦截的客户端请求(老方法),它都会帮你拦截到请求,此时你就可以对请求或响应(Request、Response)统一设置编码,简化操作;同时还可进行逻辑判断,如用户是否已经登陆、有没有权限访问该页面等等工作。它是随你的web应用启动而启动的,只初始化一次,以后就可以拦截相关请求,只有当你的web应用停止或重新部署的时候才销毁。
  • 最常见就是springmvc的编码过滤器了。还有一些其他跨域过滤器
<filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
<filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
</filter-mapping>

拦截器

  • Interceptor 在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。比如日志,安全等。一般拦截器方法都是通过动态代理的方式实现。可以通过它来进行权限验证,或者判断用户是否登陆,或者是像12306 判断当前时间是否是购票时间。
  • 拦截器不是在web.xml,比如springmvc的配置文件中配置(老方法)
<mvc:interceptors> 
           <mvc:interceptor>
                   <mvc:mapping path="/**" /> 
                   <bean id="commonInterceptor" class="org.shop.interceptor.CommonInterceptor"></bean> 
          </mvc:interceptor> 
</mvc:interceptors>

执行顺序

context-param
-->listener(监听器)
-->filter(过滤器)
-->Servlet
-->interceptor(拦截器)
-->Controller(控制器)

  • 它们之间的执行顺序,监听器是容器启动时就会触发,过滤器在请求到底Action之前执行,拦截器则是请求到底action之后执行的。


    942783-20170731225457505-1335005390.png

联系

拦截器和过滤器的区别

  • 拦截器(Interceptor)是基于Java的反射机制,而过滤器(Filter)是基于函数回调,我们需要实现的filter接口中doFilter方法就是回调函数。
  • Filter需要在web.xml中配置,依赖于Servlet。而interceptor与servlet容器无关,Interceptor需要在SpringMVC中配置,依赖于框架。拦截器本身就是在servlet内部的。
  • Filter的过滤范围比Interceptor大,Filter除了过滤请求外通过通配符可以保护页面,图片,文件等等,而Interceptor只能过滤请求。
  • 拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。

Filter pre --->dispatcher--->preHandle-->controller-->postHandle--->afterCompletion--->Filter After

使用技巧

需要监听到项目中的一些信息,并且不需要对流程做更改时,用监听器;

当需要过滤掉其中的部分信息,只留一部分时,就用过滤器;

当需要对其流程进行更改,做相关的记录时用拦截器。


image.png

相关文章

网友评论

      本文标题:springboot监听器、过滤器和拦截器

      本文链接:https://www.haomeiwen.com/subject/iqtqqctx.html