小D课堂 - 零基础入门SpringBoot2.X到实战_第6节 SpringBoot拦截器实战和 Servlet3.0自定义Filter、Listener_24、深入SpringBoot过滤器和Servlet配置过滤器

小D课堂 - 零基础入门SpringBoot2.X到实战_第6节 SpringBoot拦截器实战和 Servlet3.0自定义Filter、Listener_24、深入SpringBoot过滤器和Servlet配置过滤器,第1张

小D课堂 - 零基础入门SpringBoot2.X到实战_第6节 SpringBoot拦截器实战和 Servlet3.0自定义Filter、Listener_24、深入SpringBoot过滤器和Servlet配置过滤器 笔记

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的新特性。


是新发布的 还没有大亏摸的应用。


里面还有异步

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/585884.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-12
下一篇 2022-04-12

发表评论

登录后才能评论

评论列表(0条)

保存