当前位置: 首页 > news >正文

Java SpringBoot后端Filter包装请求(新增/覆盖请求头)

1.过滤器:TestFilter
packagecom.visy.filter;importcn.hutool.core.util.ObjectUtil;importorg.springframework.core.Ordered;importorg.springframework.core.annotation.Order;importorg.springframework.stereotype.Component;importorg.springframework.web.filter.OncePerRequestFilter;importjavax.servlet.FilterChain;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.io.IOException;@Component@Order(Ordered.HIGHEST_PRECEDENCE)publicclassTestFilterextendsOncePerRequestFilter{@OverrideprotectedvoiddoFilterInternal(HttpServletRequestrequest,HttpServletResponseresponse,FilterChainfilterChain)throwsServletException,IOException{StringtestValue=request.getHeader("Test-Key");if(ObjectUtil.isNull(testValue)){// 创建可修改的请求包装器MutableHttpServletRequestmutableRequest=newMutableHttpServletRequest(request);mutableRequest.addHeader("Test-Key","hello");filterChain.doFilter(mutableRequest,response);}else{filterChain.doFilter(request,response);}}}
2.请求包装器:MutableHttpServletRequest
packagecom.visy.filter;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletRequestWrapper;importjava.util.*;publicclassMutableHttpServletRequestextendsHttpServletRequestWrapper{privatefinalMap<String,String>customHeaders;publicMutableHttpServletRequest(HttpServletRequestrequest){super(request);customHeaders=newHashMap<>();}publicvoidaddHeader(Stringname,Stringvalue){this.customHeaders.put(name,value);}@OverridepublicStringgetHeader(Stringname){StringheaderValue=customHeaders.get(name);if(headerValue!=null){returnheaderValue;}return((HttpServletRequest)getRequest()).getHeader(name);}// Tips: 一定要写,不然@RequestHeader单个值的时候获取不到参数@OverridepublicEnumeration<String>getHeaders(Stringname){Stringvalue=getHeader(name);if(value!=null){returnCollections.enumeration(Collections.singletonList(value));}returnsuper.getHeaders(name);}@OverridepublicEnumeration<String>getHeaderNames(){Set<String>headerNames=newHashSet<>(customHeaders.keySet());Enumeration<String>e=((HttpServletRequest)getRequest()).getHeaderNames();while(e.hasMoreElements()){headerNames.add(e.nextElement());}returnCollections.enumeration(headerNames);}}
3.测试
@PostMapping({"/test"})publicvoidtest(@RequestHeaderMap<String,String>headers,@RequestHeader("Test-Key")StringtestKey,HttpServletRequestservletRequest){System.out.println("testKey1: "+headers.get("Test-Key"));//helloSystem.out.println("testKey2: "+testKey);//helloSystem.out.println("testKey3: "+servletRequest.getHeader("Test-Key"));//hello}
http://www.jsqmd.com/news/139632/

相关文章:

  • nodeJs安装
  • 2025年最强AI写论文神器!8款工具10分钟万字文献搞定!
  • BK7258 固件开发入门与安全加固要点
  • 2025专科生必看!8个AI论文工具测评,开题报告轻松搞定
  • 2025胶水厂家推荐排行榜:从产能到专利实力全方位对比 - 爱采购寻源宝典
  • 数据结构(3),双向链表の实现
  • 桂花网蓝牙网关医疗客户案例大盘点
  • 如何使用 IDEA自带的数据库工具导出 pgsql 的DDL
  • 4大AI视频工具推荐,到底哪个生成效果更好?
  • 阿里云ACK跨集群访问控制:固定Pod IP与LB配置方案
  • Windows系统文件ucrtbase.dll丢失损坏 免费下载方法
  • SSL证书签发续费
  • CISAW-SS安全软件认证|2026年培训日程公布,赋能安全开发,从代码源头筑牢防线
  • 加速AI进产业,百度伐谋发布同舟生态伙伴计划
  • jmeter
  • 2025年自然人开票API选型参考:主流方案对比与场景适配建议
  • 20251225
  • Windows系统核心文件UIAutomationCore.dll损坏 下载修复
  • ​中低频信号采集卡设计原理图:FMC209-基于FMC的4路125MAD输入、2路1GDA输出子卡 中低频信号采集​
  • Java毕设项目:基于springboot的在线考试系统(源码+文档,讲解、调试运行,定制等)
  • ArcGIS大师之路500技---047栅格数据0值设置为NoData
  • 微信小程序request错误
  • Windows系统文件ulib.dll丢失损坏 下载修复
  • python的小型实践项目
  • # 救命!面试被问HTTP缓存,我靠这篇笔记逆袭了(附实战工具+避坑指南)
  • Fiddler弱网测试
  • 微信小程序uniapp-vue美食厨房食谱大全分享
  • 想拥有超强大脑?先戒掉这7种“记忆杀手”食物!
  • 【课程设计/毕业设计】基于springboot的在线考试系统课程信息管理,在线考试管理【附源码、数据库、万字文档】
  • todgub6.dll文件丢失找不到 免费下载方法