千家信息网

怎么使用SpringBoot的拦截器来获取header的内容

发表于:2025-01-25 作者:千家信息网编辑
千家信息网最后更新 2025年01月25日,这篇文章主要为大家展示了"怎么使用SpringBoot的拦截器来获取header的内容",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"怎么使用SpringB
千家信息网最后更新 2025年01月25日怎么使用SpringBoot的拦截器来获取header的内容

这篇文章主要为大家展示了"怎么使用SpringBoot的拦截器来获取header的内容",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"怎么使用SpringBoot的拦截器来获取header的内容"这篇文章吧。

分析

既然需要动态获取那么只有两种方式:要么每次下游请求过来时从请求头中获取,要么定义统一的拦截器自动获取。

实现

那么我们就先来实现一下吧。

第一种比较简单,直接使用springboot获取请求头的方式,从controller方法入口处使用: @RequestHeader(value = "xxxx",required = false) String appUser的方式获取请求头

代码如下:

@RequestMapping(name = "获取用户详情信息",value = "/getUserDetail",method=GET) public String getUserDetail(@RequestHeader(value = "app-user",required = false) String appUser, @RequestParam(name = "search") String search){            log.info("------>拿到的请求头是:"+appUser);         return "SUCCESS"; }

此种方法虽然可以获取,但是太过low b,而且如果有几十个接口那么都要这么写,过于累赘

还是使用拦截器的方式吧

具体如下:

首先,定义一个拦截器,需要实现HandlerInterceptor,其中包含preHandler以及afterCompletion分别对应调用前以及调用完成后

package com.xxxx.cc.admin.interceptor;     import com.alibaba.fastjson.JSONObject; import com.ddmc.cc.admin.support.ThreadLocalUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor;   import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;   /*** Copyright (C), 2017-2021 * Author: sjugg* Date: 2021/5/19 10:39* FileName: AuthInterceptor* Description: 交易前置拦截器*/ @Component @Slf4j public class AuthInfoInterceptor implements HandlerInterceptor {       @Override     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {         String userInfo = request.getHeader("app-user");         log.info(">>>>>>>拦截到api相关请求头<<<<<<<<"+userInfo);         if(StringUtils.isNotEmpty(userInfo)){             //直接搂下来,放到ThreadLocal中 后续直接从中获取            ThreadLocalUtils.set(MaiCaiApiConstants.MAI_CAI_APP_USER,userInfo);         }         return true;//注意 这里必须是true否则请求将就此终止。     }      @Override     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {         //移除app-user         ThreadLocalUtils.remove("app-user");         log.info("移除请求头中的app-user:"+ThreadLocalUtils.get("app-user"));     } }

后面只要从ThreadLocal中按key去拿就可以了。

另外需要做的是

添加web过滤器

1、添加web 过滤器,管理过滤的类,以及过滤的请求路径

2、继承WebMvcConfigurationSupport 类 和上面一样Generate,复写父类的方法 addInterceptors

3、通过registry.addInterceptor拦截类,addPathPatterns拦截路径,excludePathPatterns添加允许路径

这里我拦截的是以xxxx开头的请求。

package com.ddmc.cc.admin.config;  import com.ddmc.cc.admin.interceptor.AuthInfoInterceptor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;   /*** ** @author sjugg* @since 2021/5/13 4:43 下午*/ @Configuration public class WebConfig implements WebMvcConfigurer {      @Autowired     private AuthInfoInterceptor authInfoInterceptor;      @Override     public void addInterceptors(InterceptorRegistry registry) {         registry.addInterceptor(authInfoInterceptor).addPathPatterns("/xxxx/*");     } }

执行效果如下

请求头里设置app-user信息

可以看到Controller中已经拿到请求头里的信息

获取head的代码:

@RequestMapping(name = "获取用户详情信息",value = "/getUserDetail",method=GET) public String getUserDetail(@RequestParam(name = "search") String search){     log.info("-----> heard info here: "+ThreadLocalUtils.get("app-user"));     return "SUCCESS";}

方法执行完之后对应的threadlocal变量也被清除

以上是"怎么使用SpringBoot的拦截器来获取header的内容"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

拦截器 内容 信息 方式 方法 篇文章 路径 代码 用户 要么 详情 过滤器 学习 帮助 累赘 从中 入口 入口处 动态 变量 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 公司网络安全的治理结构式 科学引文数据库源期刊 表格插件连接数据库 如何利用宏录入客户数据库 网络安全创业项目 麒麟合盛网络技术有限公司 我的世界服务器保持开启插件 td数据库 填充函数 软件开发计划书知乎 黄浦区智能网络技术设备 吉夫森软件开发有限公司 上海一站式软件开发定制价格 攀枝花钢城大厦软件开发 黑龙江驾驶舱系统软件开发 济宁商城软件开发产品 英雄联盟全球服务器客户端 更改access数据库表编码 怎么把数据库信息全部删掉 云服务器下载速度为什么这么慢 方舟服务器管理器等待发布 互联网教育科技创始人是谁 数据库小工具源码 数据库技术与应用大纲 麒麟合盛网络技术有限公司 添加邮箱收件服务器不知怎么添 软件开发计划书知乎 女武神兽数码兽数据库 odd打水软件开发 上海项目软件开发收费报价表 我们用的网络安全吗
0