源无极

导航

 

前言:

本节课介绍:

1.自定义过滤器Filter

2.Servlet3的使用

3.自定义Listenter

4.自定义拦截器Interceptor

一.filter

关于过滤器的含义本章不会过多陈述,不了解的可以百度查找,资料很多。

filter简单理解:人--->检票员(filter)---> 景点

1、SpringBoot启动默认加载的Filter 
            characterEncodingFilter
            hiddenHttpMethodFilter
            httpPutFormContentFilter
            requestContextFilter

我们通过启动springboot程序也是可以看到的

映射的URL

 

2、Filter优先级

  我们查看Ordered接口

            Ordered.HIGHEST_PRECEDENCE


            Ordered.LOWEST_PRECEDENCE

获得优先级的方法

           

   低位值意味着更高的优先级 Higher values are interpreted as lower priority
          

 自定义Filter,避免和默认的Filter优先级一样,不然会冲突

            注册Filter的bean FilterRegistrationBean
            同模块里面有相关默认Filter
                web->servlet->filter

3、自定义Filter


            1)使用Servlet3.0的注解进行配置
            2)启动类里面增加 @ServletComponentScan,进行扫描(在主程序类上面添加)
            3)新建一个Filter类,implements Filter,并实现对应的接口
            4) @WebFilter 标记一个类为filter,被spring进行扫描 
                urlPatterns:拦截规则,支持正则

          5)控制chain.doFilter的方法的调用,来实现是否通过放行
               不放行,web应用resp.sendRedirect("/index.html");
                场景:权限控制、用户登录(非前端后端分离场景)等

6)当我们启动工程发现自定义的过滤器也添加到里面了

7)这时候我们访问之前的controller里面的方法

只是过滤api方法

8)修改访问路径

添加index.html页面

访问执行doFilter方法

9)访问时没有username调转到index.html

10)传入参数 doFilter放行

官网地址:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-embedded-container-servlets-filters-listeners

官网上过滤器的顺序

二.Servlet3.0的注解自定义原生Servlet实战

 在开发一些小项目的时候有时候会用到Servlet,所以我们需要用到Servlet3.0的注解
    讲解:使用 Servlet3.0的注解自定义原生Servlet和Listener
        1、自定义原生Servlet (记得要在主程序添加@ServletComponentScan  才能扫到@webServlet的注解)

启动访问即可

三、Servlet3.0的注解自定义原生Listener监听器实战


        简介:监听器介绍和Servlet3.0的注解自定义原生Listener监听器实战

        1、自定义Listener(常用的监听器 servletContextListener、httpSessionListener、servletRequestListener)

                                    servletRequestListener

1)

2)

3)

4)查看控制台

                                                 servletContextListener

servletContextListener:应用上下文监听器,启动应用的时候,就进行调用

1)

2)启动监听器初始化(可以用于初始化一些缓存数据)

四.SpringBoot2.X自定义拦截器实战及新旧配置对比(核心知识)

 

简介: 讲解拦截器使用,Spingboot2.x新版本配置拦截拦截器和旧版本SpringBoot配置拦截器区别讲解
     
    1、@Configuration
        继承WebMvcConfigurationAdapter(SpringBoot2.X之前旧版本)

源码

        SpringBoot2.X 新版本配置拦截器 implements WebMvcConfigurer

    2、自定义拦截器 HandlerInterceptor
        preHandle:调用Controller某个方法之前
        postHandle:Controller之后调用,视图渲染之前,如果控制器Controller出现了异常,则不会执行此方法
        afterCompletion:不管有没有异常,这个afterCompletion都会被调用,用于资源清理
    1)

2)访问我们controller的方法

3)

4)查看控制台

注意:如果不希望拦截api2文件夹下的某一个方法

registry.addInterceptor(new LoginIntercepter()).addPathPatterns("/api2/*").excludePathPatterns("/api2/xxx/**")
    3、按照注册顺序进行拦截,先注册,先被拦截

再添加一个自定义拦截器执行顺序怎么样呢?

1)同理

2)同理

3)启动访问

4)注意变化

    拦截器不生效常见问题:
        1)是否有加@Configuration
        2)拦截路径是否有问题 **  和 * 
        3)拦截器最后路径一定要 “/**”, 如果是目录的话则是 /*/

    Filter与Interceptor区别


      1.   是基于函数回调 doFilter(),而Interceptor则是基于AOP思想
      2.  Filter在只在Servlet前后起作用,而Interceptor够深入到方法前后、异常抛出前后等

      3.  依赖于Servlet容器即web应用中,而Interceptor不依赖于Servlet容器所以可以运行在多种环境。
    
      4.  在接口调用的生命周期里,Interceptor可以被多次调用,而Filter只能在容器初始化时调用一次。
        
        Filter和Interceptor的执行顺序
         
        过滤前->拦截前->action执行->拦截后->过滤后

有兴趣的可以自行测试

注意过滤器路径这样配置

1)初始化

2)结果

总结

1.拦截器,过滤器,监听器对比

2.三者启动顺序:

监听器 > 过滤器 > 拦截器

我是这样记忆的:接到上级命令,要求对电话进去监听,过滤出恐怖分子,然后,拦截他们的恐怖袭击行动。

配置位置:(用SSM框架开发的情况)

监听器、过滤器一般配置在web.xml中,拦截器一般配置在springmvc.xml配置文件中

1) 一启动过滤器进行初始化

2) 注意顺序

posted on 2018-11-29 22:12  源无极  阅读(151)  评论(0编辑  收藏  举报