Springboot2.x快速入门(三)过滤器、监听器、拦截器

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的⽅法的调⽤,来实现是否通过放⾏
![在这里插入图片描述](https://img-blog.csdnimg.cn/3fb4cca5da67431499086de0793003fb.png

案例思路:使用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执⾏->拦截后->过滤后

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Springboot拦截过滤器监听器是用来处理请求和响应的组件。拦截是基于Java的反射机制,可以在请求处理前后进行一些操作,比如记录日志、权限验证等。过滤器是基于Servlet规范的,可以在请求进入Servlet之前或响应返回给客户端之前进行一些操作,比如字符编码、请求过滤等。监听器是用来监听Web应用程序中的事件,比如ServletContext的创建和销毁、Session的创建和销毁等。\[1\] 在Springboot中,可以通过在application类上添加注解@SpringBootApplication和@ServletComponentScan来启用拦截过滤器监听器。\[2\]拦截过滤器监听器都是通过实现相应的接口来实现的。例如,创建一个过滤器可以通过实现Filter接口,并在@Component注解中添加@Order注解来指定过滤器的执行顺序。\[3\] 拦截过滤器监听器Springboot中都可以起到不同的作用,可以根据具体需求选择使用哪种组件来处理请求和响应。 #### 引用[.reference_title] - *1* *2* [springBoot(6)---过滤器监听器拦截](https://blog.csdn.net/yudiandemingzi/article/details/80399971)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [SpringBoot拦截-过滤器-监听器](https://blog.csdn.net/weixin_45203607/article/details/120250823)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豆浆两块钱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值