文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何使用Springboot实现拦截器获取header内容

2023-06-15 04:40

关注

小编给大家分享一下如何使用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;    @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过滤器

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

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

通过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;    @Configuration public class WebConfig implements WebMvcConfigurer {      @Autowired     private AuthInfoInterceptor authInfoInterceptor;      @Override     public void addInterceptors(InterceptorRegistry registry) {         registry.addInterceptor(authInfoInterceptor).addPathPatterns("/xxxx/*");     } }

执行效果如下

请求头里设置app-user信息

 如何使用Springboot实现拦截器获取header内容

可以看到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";}

如何使用Springboot实现拦截器获取header内容

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

 如何使用Springboot实现拦截器获取header内容

springboot是什么

springboot一种全新的编程规范,其设计目的是用来简化新Spring应用的初始搭建以及开发过程,SpringBoot也是一个服务于框架的框架,服务范围是简化配置文件。

看完了这篇文章,相信你对“如何使用Springboot实现拦截器获取header内容”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网行业资讯频道,感谢各位的阅读!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯