一、深刻SpringBoot2.x过滤器Filter和使用Servlet3.0配置自定义Filter实战(核心知识)
简介:讲解SpringBoot里面Filter讲解和使用Servlet3.0配置自定义Filter实战
filter简单理解:人--->检票员(filter)---> 景点
一、SpringBoot启动默认加载的Filter
characterEncodingFilter
hiddenHttpMethodFilter
httpPutFormContentFilter
requestContextFilter
二、Filter优先级
Ordered.HIGHEST_PRECEDENCE
Ordered.LOWEST_PRECEDENCE
低位值意味着更高的优先级 Higher values are interpreted as lower priority
自定义Filter,避免和默认的Filter优先级同样,否则会冲突
注册Filter的bean FilterRegistrationBean
同模块里面有相关默认Filter
web->servlet->filter
三、自定义Filter
1)使用Servlet3.0的注解进行配置
2)启动类里面增长 @ServletComponentScan,进行扫描
3)新建一个Filter类,implements Filter,并实现对应的接口
4) @WebFilter 标记一个类为filter,被spring进行扫描
urlPatterns:拦截规则,支持正则
6)控制chain.doFilter的方法的调用,来实现是否经过放行
不放行,web应用resp.sendRedirect("/index.html");
场景:权限控制、用户登陆(非前端后端分离场景)等
一、官网地址:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-embedded-container-servlets-filters-listeners
html
启动应用。查看启动日志
这是springboot的默认过滤器
mapping是映射。包括咱们本身写的
动态加载
异常处理ControllerAdvice
Ordered就是一个接口。
里面有两个常量。Integer的最大值和最小值
里面还有个geteOrder方法就是获取它 的优先级
这里来看FilterRegistrationBean。点进去查看源码。FilterRegistrationBean这是一个注册Filter的Bean
在springboot的包下
这些是默认的Filter
随便打开一个默认的Filter
经过getOrder方法返回上面的order的优先级别
再去看他的上一级
上一级里面有个比较重要的知识点。doFilter,咱们在自定义过滤器的时候会讲解doFilter
filter必须依赖Servlet容器,主要的机制是基于一个回调机制前端
使用servlet3.0的注解配置咱们的自定义Filter
三、自定义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在容器销毁的时候进行调用。
web
@WebFilter是spring3.0的一个注解。
urlPatterns:要拦截的url。 /*是拦截全部的请求。这里配置的是/api/*拦截api开头的下面的全部请求。
固然咱们也能够拦截例如不一样模块下的请求。这里前面加上admin就是拦截admin模块下的全部请求。
filterName这里暂时先用不到。这里随便写一个名称就能够了。
4) @WebFilter 标记一个类为filter,被spring进行扫描
urlPatterns:拦截规则,支持正则
6)控制chain.doFilter的方法的调用,来实现是否经过放行
不放行,web应用resp.sendRedirect("/index.html");
场景:权限控制、用户登陆(非前端后端分离场景)等spring
查看启动日志。咱们自定义的Filter已经初始化了。
上面几个是默认的Filter。下面的loginFilter是咱们自定义的
访问接口测试一下。只有api开头的才会被拦截
访问这个地址。页面没有任何输出。
可是后台输出了。
咱们传递一个username过去。username等于xdclass就放行了。
后端
热加载的时候,从新加载了容器。Filter的destory方法被调用了。
从新加载的时候仍是会初始化Filter
换一个错误的username值。什么都没有返回
加一个跳转。而后强制return
静态页面在这里
改为username为aaa
跳转到了index页面
官网的地址对过滤器进行说明
一、官网地址:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-embedded-container-servlets-filters-listeners
Servlet3.0的新特性。是新发布的 尚未大亏摸的应用。里面还有异步
api