news 2026/5/25 23:49:43

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/22 2:13:38

如何使用 IDEA自带的数据库工具导出 pgsql 的DDL

此时会有很多 alter table xxx owner to postgres;的语句&#xff0c;此时&#xff0c;需要&#xff0c;将他们移动到一行&#xff0c;然后替换到所有 第一步&#xff0c;将换行变成一行第二步&#xff0c;把包含 owner to postgres;的所有行替换为空行

作者头像 李华
网站建设 2026/5/22 6:33:27

Windows系统文件tquery.dll丢失损坏 免费下载方法

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/5/20 16:21:08

Windows系统文件ulib.dll丢失损坏 下载修复

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/5/24 23:46:52

加速AI进产业,百度伐谋发布同舟生态伙伴计划

1分钟完成曾需10小时的汽车风阻验证&#xff0c;将数周的科研课题攻关压缩至数小时&#xff0c;十倍级提升科研效率……12月25日&#xff0c;在百度AI Day活动上&#xff0c;百度公布超级智能体百度伐谋的最新进展&#xff1a;发布一个月以来&#xff0c;已有超2000家企业申请试…

作者头像 李华
网站建设 2026/5/20 19:43:10

CAN软件哪款好用?虹科HK-CoreTest PK PCAN-View

在汽车电子开发与测试中&#xff0c;选择一款高效、易用的CAN测试软件至关重要。面对市场上众多工具&#xff0c;工程师常纠结于“CAN测试软件哪款比较好用&#xff1f;”本文将从功能、易用性、兼容性等维度&#xff0c;对比国际主流工具&#xff08;如PCAN-View&#xff09;与…

作者头像 李华