Spring Boot 拦截器无效,不起作用
这个问题一般是解决
WebMvcConfigurerAdapter
过时问题造成的。导致这个问题可能有两个原因:一个是拦截器写错了,另一个是拦截器配置错了。
1、需求是这样的
拦截所有的
api
请求,判断其请求头中的secret
参数是否正确,正确的请求才能访问api
。
2、拦截器配置
需要先写拦截器,然后再配置到
Spring Boot
环境中。
2.1、写一个拦截器
在
Spring MVC
中,拦截器有两种写法:要么实现HandlerInterceptor
接口,要么实现WebRequestInterceptor
接口,具体内容请看这里详述Spring MVC
框架中拦截器Interceptor
的使用方法。
而Spring Boot
也只是集成了Spring MVC
而已,所以拦截器的写法还是一样的。不一样的是Spring MVC
的拦截器需要在xml
文件中配置,而Spring Boot
只需要在类上加@Component
注解即可,这样当前拦截器才会被扫描到。
这里只需要实现HandlerInterceptor
接口即可(这里没啥坑)。
/*** author : 颜洪毅* e-mail : yhyzgn@gmail.com* time : 2019-08-29 17:44* version: 1.0.0* desc : 用户拦截器*/
@Component
public class UserInterceptor implements HandlerInterceptor {private static Logger log = Logger.getLogger(UserInterceptor.class);@Autowiredprivate UserThreadLocal local;@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {log.info("接收到请求");local.set(request.getParameter("user"));return true;}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {local.remove();log.info("请求响应完成");}
}
2.2、将拦截器配置到Spring Boot
环境中
目前(
2.0.4.RELEASE
版本)WebMvcConfigurerAdapter
已过时,如果你执意要用的话,应该没啥坑。但是被强迫症时刻针对的人,坑就来啦。
WebMvcConfigurerAdapter
过时了,那么用谁来代替呢?机智的人可能早就发现了,过时的这个只不过是个适配器(适配器模式),那就可以直接使用它所实现的那个接口啊,就是WebMvcConfigurer
呗。对,就是这个,别犹豫了。。我就被百度坑得不轻,具体说说怎么被坑的吧。
- 百度后我查到的解决方案这样的
两种方法,并且都还强烈推荐第二种方法
// 方法一:实现WebMvcConfigurer接口
public class WebConfig implements WebMvcConfigurer{// ...
}// 方法二:继承WebMvcConfigurationSupport类
public class WebConfig extends WebMvcConfigurationSupport{// ...
}
于是就直接用了第二种方法,写完跑了项目发现没啥效果,打日志也出不来。然后又改回第一种方法,果然,有效果了。
具体配置如下
必须加上@Configuration
注解,Spring
才能统一管理当前的拦截器实例。
addPathPatterns("/api/**")
配置拦截路径,其中/**
表示当前目录以及所有子目录(递归),/*
表示当前目录,不包括子目录。
/*** author : 颜洪毅* e-mail : yhyzgn@gmail.com* time : 2019-08-29 17:48* version: 1.0.0* desc : mvc配置*/
@Configuration
public class WebConfig implements WebMvcConfigurer {@Autowiredprivate UserInterceptor interceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {// 添加拦截器,配置拦截地址registry.addInterceptor(interceptor).addPathPatterns("/api/**");}
}
不出意外的话,你的拦截器应该起作用啦!
Spring Boot 拦截器无效,不起作用相关推荐
- Spring Boot拦截器(WebMvcConfigurerAdapter)
直接按我的步骤走都没有问题: 1 配置自定义的拦截器: package com.configs;import org.slf4j.Logger; import org.slf4j.LoggerFact ...
- 解决Spring Boot 拦截器注入service为空的问题
解决Spring Boot 拦截器注入service为空的问题 参考文章: (1)解决Spring Boot 拦截器注入service为空的问题 (2)https://www.cnblogs.com/ ...
- 使用spring boot拦截器实现青少年模式
思路方法一: 便用Spring Boot拦截器采累计在线时间采实现青少年模式的步骤,可以参考以卜步骤: 1.创建一个拦截器类,实现Handlerlnterceptor 接口. 2.在拦截器类中,定义一 ...
- Spring Boot 拦截器
(一)拦截器概述 1.1拦截器介绍 拦截器的作用类似于Servlet 中的Filter,都可以用于对处理器进行预处理和后处理.在Spring MVC 与Spring Boot 中使用拦截器一般是实现H ...
- spring boot 拦截器获取controller返回的数据_高级码农Spring Boot实战与进阶之过滤器和拦截器的使用及其区别...
众所周知的Spring Boot是很优秀的框架,它的出现简化了新Spring应用的初始搭建以及开发过程,大大减少了代码量,目前已被大多数企业认可和使用.这个专栏将对Spring Boot框架从浅入深, ...
- Spring boot拦截器登录检查
拦截器 进行登录检查 从登录页面跳转到成功页面之后 为了防止表单重复提交 配置视图映射,利用重定向到成功页面 此时,在浏览器直接输入,配置的视图映射地址 也可以直接映射.跳转到成功页面 登录页面,也就 ...
- Spring Boot拦截器(Interceptor)详解
写了那么久的博客,始于Python爬虫,目前专于Java学习,终于有了属于自己的小窝,欢迎各位访问我的个人网站. 文章目录 Interceptor 介绍 Interceptor 作用 自定义 Inte ...
- java 拦截器响应中取所有参数,spring boot拦截器中获取request post请求中的参数
最近有一个需要从拦截器中获取post请求的参数的需求,这里记录一下处理过程中出现的问题. 首先想到的就是request.getParameter(String )方法,但是这个方法只能在get请求中取 ...
- spring boot拦截器 过滤器
1.拦截器 登录拦截 自定义拦截路径 //全局配置继承WebMvcConfigurer接口 @Configuration public class MyHandler implements WebMv ...
最新文章
- TensorFlow 1.7.0正式发布,Bug修复和改进内容都在这里了
- java 十二星座数据下载_十二星座
- Spring-----projects-----概述
- TCP 协议面试灵魂 12 问 | 强势整理
- 免输入用户名和密码以及git clone以后想提交代码
- 小米5点位图_5.22首域金融午评:次日02:00 美联储公布5月货币政策会议纪要
- jsp标签 判断 余数_程序员的数学基础课(三)余数与迭代法
- 类Array对象中是否该直接使用Array的原型方法?
- jquery 获取当前元素的索引值
- AC日记——[NOI2006]最大获利 bzoj 1497
- C语言基础教程篇之程序结构
- 别再用 Visio 了!试试这个比它快 10 倍的画图工具不香吗?
- 前端面试 - 项目流程
- myeclipse10破解找不到common文件夹的问题
- 网络营销优势有哪些?
- VML Mathematical Functions
- 音质好的蓝牙耳机有哪些?盘点四款好音质蓝牙耳机
- 微信内的浏览器缓存清理方法
- Boundary Loss 原理与代码解析
- 国内外日常上网必备,实用趣味网站合集