文章目录
SpringBoot2.X过滤器
SpringBoot2.X⾥⾯的过滤器:
过滤器的优先级比较:
Ordered.HIGHEST_PRECEDENCE
Ordered.LOWEST_PRECEDENCE
低位值意味着更高的优先级,自定义Filter,避免和默认的Filter优先级⼀样,不然会冲突。
Servlet3.0的注解开发自定义Filter
使⽤Servlet3.0的注解进⾏配置:
1、启动类⾥⾯增加 @ServletComponentScan,进⾏扫描
2、新建⼀个Filter类,implements Filter,并实现对应的接⼝
3、@WebFilter 标记⼀个类为filter,被spring进⾏扫描
4、urlPatterns:拦截规则,⽀持正则
5、控制chain.doFilter的⽅法的调⽤,来实现是否通过放⾏
案例思路:使用getHeader获得前端回传的参数token先(使用StringUtils工具类)判断获得的token是否为空(就是有没有获取到),没有获取到就再通过getParameter进行获取参数,还有获取到就返回,获取到了就使用获取到的token找到对应的user对象,能找到(user对象不为空)就通过chain.doFilter的⽅法的调⽤,来实现通过放⾏。
运行结果:先登录,使用token传递参数
前后端分离-json错误码提示开发
使用objectMapper类的writeValueAsString方法完成String与json的转换
运行结果:
Servlet3.0的注解原生Servlet
@WebServlet(name = "userServlet", urlPatterns = "/api/v1/test/customs" )
name: 服务器名称(自定义)
urlPatterns: 访问路径
运行结果:
Servlet3.0的注解自定义原生Listener监听器
常用监听器:
1、ServletContextListener 应用启动监听
2、HttpSessionLisener 会话监听
3、ServletRequestListener 请求监听
运行看监听器监听顺序:
应用上下文监听器:
contextInitialized()
运行启动类:
requestInitialized()
前端向后端发起请求:
requestDestroyed
后端返回前端数据(请求结束):
contextDestroyed
关闭服务器
SpringBoot2.X拦截器
拦截器配置
1、⾃定义拦截器 HandlerInterceptor
preHandle: 调⽤Controller某个⽅法之前
postHandle: Controller之后调⽤,视图渲染之前,如果控制器Controller出现了
异常,则不会执⾏此⽅法
afterCompletion: 不管有没有异常,这个afterCompletion都会被调⽤,⽤于资
源清理
2、拦截器配置类进行注册
按照注册顺序进⾏拦截,先注册,先被拦截。
拦截器最后路径⼀定要 /**
如果是目录的话则是 /*/
使用拦截器改造用户登录-下单
preHandle方法中return true时继续执行执行,return false不再执行后面的方法
将过滤器的代码粘过来,去掉没用的地方,修改部分即可
补充:配置不拦截某些路径
registry.addInterceptor(getLoginInterceptor())
.addPathPatterns("/api/v1/pri/**","/api/v1/pri/user/**")
.excludePathPatterns("/**/*.html","/**/*.js");
过滤器-拦截器
1、Filter和Interceptor⼆者都是AOP编程思想的体现,功能基本都可以实现,拦截器功能更强⼤些,Filter能做的事情它都能做
2、Filter在只在Servlet前后起作⽤,⽽Interceptor够深⼊到⽅法前后、异常抛出前后等
filter依赖于Servlet容器即web应⽤中,⽽Interceptor不依赖于Servlet容器所以可以运⾏在
多种环境。
3、在接⼝调⽤的⽣命周期⾥,Interceptor可以被多次调⽤,⽽Filter只能在容器初始化时调⽤⼀次。
4、Filter和Interceptor的执⾏顺序:过滤前->拦截前->action执⾏->拦截后->过滤后