博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring boot ServletRequest 修改header
阅读量:6818 次
发布时间:2019-06-26

本文共 2852 字,大约阅读时间需要 9 分钟。

hot3.png

背景

由于环境升级,需要重新设置header中的 一个值,暂设定为 org . http 请求时加入在header中加入org,但在filter中,会通过验证,生成新的org,需要覆盖原来header中的org.

修改 filter 。代码是在网上找的一部分,根据自己的需要进行调整了。

@Component@Slf4j@WebFilter(urlPatterns = { "/" }, filterName = "authorFilter")public class DemoFilter implements Filter {    @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,                                   FilterChain filterChain) throws IOException, ServletException {        HttpServletRequest req = (HttpServletRequest) servletRequest;        req.setAttribute("hdd","tttt");        HeaderMapRequestWrapper requestWrapper = new HeaderMapRequestWrapper(req);        requestWrapper.addHeader("realm","test");        log.info("header-->{}",getHeadKeyAndValue(req));        filterChain.doFilter(requestWrapper, servletResponse);    }    private Map
getHeadKeyAndValue(HttpServletRequest httpRequest) { Map
header = new HashMap<>(); Enumeration
headerNames = httpRequest.getHeaderNames(); while (headerNames.hasMoreElements()) { String nextElement = headerNames.nextElement(); header.put(nextElement, httpRequest.getHeader(nextElement)); } return header; }}@Slf4jpublic class HeaderMapRequestWrapper extends HttpServletRequestWrapper { /** * construct a wrapper for this request * * @param request */ public HeaderMapRequestWrapper(HttpServletRequest request) { super(request); } private Map
headerMap = new HashMap<>(); /** * add a header with given name and value * * @param name * @param value */ public void addHeader(String name, String value) { headerMap.put(name, value); } @Override public String getHeader(String name) { log.info("getHeader --->{}",name); String headerValue = super.getHeader(name); if (headerMap.containsKey(name)) { headerValue = headerMap.get(name); } return headerValue; } /** * get the Header names */ @Override public Enumeration
getHeaderNames() { List
names = Collections.list(super.getHeaderNames()); for (String name : headerMap.keySet()) { names.add(name); } return Collections.enumeration(names); } @Override public Enumeration
getHeaders(String name) { log.info("getHeaders --->>>>>>{}",name); List
values = Collections.list(super.getHeaders(name)); log.info("getHeaders --->>>>>>{}",values); if (headerMap.containsKey(name)) { log.info("getHeaders --->{}",headerMap.get(name)); values = Arrays.asList(headerMap.get(name)); } return Collections.enumeration(values); }}

经过测试,在header解析时,是通过getHeaders方法,这个地方原来的时候是通过,values直接添加新的header,组成了一个 header的数组,而不是覆盖。

转载于:https://my.oschina.net/u/3247419/blog/2993287

你可能感兴趣的文章
ImageMaigck不支持中文路径的问题
查看>>
俄罗斯方块
查看>>
ZOJ 2061 - Buy the Ticket
查看>>
博客园定制页面(五)——使用自定义JS脚本(公告栏显示时间)
查看>>
清华申请退学博士作品:完全用Linux工作
查看>>
总结:串和数组的学习
查看>>
Canvas + JavaScript 制作图片粒子效果
查看>>
去你妈的瑞星
查看>>
开发人员学Linux(5):CentOS7编译安装Nginx并搭建Tomcat负载均衡环境
查看>>
需求之辩
查看>>
Virtual Machine Manager 2012 R2创建SQL 配置文件
查看>>
容灾备份的7个等级
查看>>
疯狂ios讲义疯狂连载之实现游戏视图控制器
查看>>
虚拟机XP系统---扩展磁盘空间
查看>>
Windows 10 MSDN官方原版ISO镜像(简体中文)下载
查看>>
大数据与CT,IT的关系?
查看>>
利用腾讯企业邮箱zabbix3.x邮件告警详细配置(微信/QQ/短信通知)
查看>>
软件自动化测试框架
查看>>
Centos7系列(七)逻辑卷详解
查看>>
Kafka笔记整理(三):消费形式验证与性能测试
查看>>