• 小D课堂


    笔记

    1、深入SpringBoot2.x过滤器Filter和使用Servlet3.0配置自定义Filter实战(核心知识)
        简介:讲解SpringBoot里面Filter讲解和使用Servlet3.0配置自定义Filter实战
            
            filter简单理解:人--->检票员(filter)---> 景点

            1、SpringBoot启动默认加载的Filter 
                characterEncodingFilter
                hiddenHttpMethodFilter
                httpPutFormContentFilter
                requestContextFilter
                    
            2、Filter优先级

                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:拦截规则,支持正则

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

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

    开始

    启动应用。查看启动日志

    这是springboot的默认过滤器

    mapping是映射。包括我们自己写的

    动态加载

    异常处理ControllerAdvice





    Ordered就是一个接口。

    里面有两个常量。Integer的最大值和最小值

    里面还有个geteOrder方法就是获取它 的优先级



    这里来看FilterRegistrationBean。点进去查看源码。FilterRegistrationBean这是一个注册Filter的Bean


    在springboot的包下

    这些是默认的Filter



    随便打开一个默认的Filter

    通过getOrder方法返回上面的order的优先级别

    再去看他的上一级

    上一级里面有个比较重要的知识点。doFilter,我们在自定义过滤器的时候会讲解doFilter

    filter必须依赖Servlet容器,主要的机制是基于一个回调机制

    自定义Filter

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

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

    新建了一个Filter模块

    实现Filter接口。

    里面有是哪个方法需要去实现

    init方法是容器启动的时候进行加载

    doFilter:核心的处理业务的方法


    xdclss等于接收的参数username那么就放行,否则直接return返回

    destory在容器销毁的时候进行调用。

    配置注解,加入spring进行管理

    @WebFilter是spring3.0的一个注解。
    urlPatterns:要拦截的url。 /*是拦截所有的请求。这里配置的是/api/*拦截api开头的下面的所有请求。

    当然我们也可以拦截例如不同模块下的请求。这里前面加上admin就是拦截admin模块下的所有请求。

    filterName这里暂时先用不到。这里随便写一个名称就可以了。

    4) @WebFilter 标记一个类为filter,被spring进行扫描 
                    urlPatterns:拦截规则,支持正则


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

    启动类需要加注解@ServletComponentScan

    启动测试


    查看启动日志。我们自定义的Filter已经初始化了。

    上面几个是默认的Filter。下面的loginFilter是我们自定义的


    访问接口测试一下。只有api开头的才会被拦截

    访问这个地址。页面没有任何输出。

    但是后台输出了。

    我们传递一个username过去。username等于xdclass就放行了。

    快速创建一个新的方法去测试



    热加载的时候,重新加载了容器。Filter的destory方法被调用了。


    重新加载的时候还是会初始化Filter





    换一个错误的username值。什么都没有返回

    加一个跳转。然后强制return

    静态页面在这里

    改成username为aaa

    跳转到了index页面


    官网的地址对过滤器进行说明
    1、官网地址:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-embedded-container-servlets-filters-listeners

    Servlet3.0的新特性。是新发布的 还没有大亏摸的应用。里面还有异步


     

  • 相关阅读:
    HDU 2001 计算亮点间的距离
    HDU 1003 Max Sum
    HDU 2091 空心三角形
    HDU 2021 发工资咯:)
    HDU 2028Lowest Common Multiple Plus
    asp.net面试题
    BSD socket
    循环添加textbox的数据
    总结一下网站注入与防范的方法
    net生成12位随机数
  • 原文地址:https://www.cnblogs.com/wangjunwei/p/11420983.html
Copyright © 2020-2023  润新知