news 2026/7/15 2:53:10

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/7/1 18:12:33

打通复杂医疗数据链路:某头部医疗服务商的数据底座落地经验分享

在医疗数字化与智慧医疗建设不断推进的背景下&#xff0c;稳定、准确的数据同步是数据平台能否长期运行的基础能力之一。医院信息系统复杂、历史数据体量大&#xff0c;一旦数据链路出现问题&#xff0c;影响的往往不仅是报表时效&#xff0c;还可能直接影响临床业务和监管统计…

作者头像 李华
网站建设 2026/7/8 10:02:39

口碑好的煤化工企业各类水池清淤施工服务商

口碑卓越的煤化工企业如何选择各类水池清淤施工服务商在煤化工这一高能耗、高流程复杂性的行业中&#xff0c;各类工艺水池、循环水池、沉淀池及事故应急池的正常运行是保障生产连续性与安全环保达标的关键。然而&#xff0c;水池淤积是普遍存在的难题&#xff0c;不仅会缩减有…

作者头像 李华
网站建设 2026/7/8 10:05:33

智能邮件分拣机的PLC控制系统设计

邮件分拣机plc s7-1200 1&#xff09;邮件A、邮件B、邮件C、邮件D之间有不同之处。 2&#xff09;邮件传送之间有必要的加入限位开关。 3&#xff09;气缸、传送带动作有相应的指示灯提示。 4&#xff09;分拣在各区的邮件可以进行自动计件&#xff0c;并实时显示计件数。 5&a…

作者头像 李华