• Java通过过滤器修改header


    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过。如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/mao2080/

    1、问题所在

      项目需要在聚合层做header重写,于是搜集了很多资料,最终确定了使用filter来实现。

    2、代码片段

     1 package com.filter;
     2 
     3 import org.springframework.stereotype.Component;
     4 import org.springframework.web.filter.OncePerRequestFilter;
     5 
     6 import javax.servlet.FilterChain;
     7 import javax.servlet.ServletException;
     8 import javax.servlet.http.HttpServletRequest;
     9 import javax.servlet.http.HttpServletRequestWrapper;
    10 import javax.servlet.http.HttpServletResponse;
    11 import java.io.IOException;
    12 import java.util.Arrays;
    13 import java.util.Collections;
    14 import java.util.Enumeration;
    15 import java.util.HashMap;
    16 import java.util.List;
    17 import java.util.Map;
    18 
    19 @Component
    20 public class HeadFilter extends OncePerRequestFilter {
    21 
    22     @Override
    23     protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
    24         HeaderRequestWrapper httpServletRequestWrapper = new HeaderRequestWrapper(request);
    25         httpServletRequestWrapper.addHeader("headerTest", "headerTest");
    26         chain.doFilter(httpServletRequestWrapper, response);
    27     }
    28 
    29     private class HeaderRequestWrapper extends HttpServletRequestWrapper {
    30 
    31         public HeaderRequestWrapper(HttpServletRequest request) {
    32             super(request);
    33         }
    34 
    35         private Map<String, String> headerMap = new HashMap<>();
    36 
    37         public void addHeader(String name, String value) {
    38             this.headerMap.put(name, value);
    39         }
    40 
    41         @Override
    42         public String getHeader(String name) {
    43             String headerValue = super.getHeader(name);
    44             if (this.headerMap.containsKey(name)) {
    45                 headerValue = this.headerMap.get(name);
    46             }
    47             return headerValue;
    48         }
    49 
    50         @Override
    51         public Enumeration<String> getHeaderNames() {
    52             List<String> names = Collections.list(super.getHeaderNames());
    53             for (String name : this.headerMap.keySet()) {
    54                 names.add(name);
    55             }
    56             return Collections.enumeration(names);
    57         }
    58 
    59         @Override
    60         public Enumeration<String> getHeaders(String name) {
    61             List<String> values = Collections.list(super.getHeaders(name));
    62             if (this.headerMap.containsKey(name)) {
    63                 values = Arrays.asList(this.headerMap.get(name));
    64             }
    65             return Collections.enumeration(values);
    66         }
    67 
    68     }
    69 
    70 }

    3、执行效果

    4、参考网站

    https://bbs.csdn.net/topics/392205676

  • 相关阅读:
    OSGI .Net 框架学习
    ArcEngine开发过程中的空间关系
    ITOCControl添加鼠标右键菜单
    IHookHelper的使用
    ITopologicalOperator接口调用
    GeoProcessor的使用方法
    ArcEngine内置工具条
    OSGI.NET插件方式开发你的应用
    C#在linux上运行实现
    Linux 下随机启动自己的应用 -请使用while(true) 不要Console.ReadKey()
  • 原文地址:https://www.cnblogs.com/mao2080/p/11694474.html
Copyright © 2020-2023  润新知