javax.servlet.http.HttpServletRequest怎么添加请求头的...
困扰了很久..
求助各位..
谢谢!!

解决方案 »

  1.   

    客户端还是服务端?HttpServletRequest是请求的头信息,服务端不添加,只解析客户端要根据你用的httpclient 工具包 API编写代码
      

  2.   

    你是想请求接口的时候设置请求头信息??
    get请求用httpGet.addHeader(name, value);
    post用httpPost.addHeader(name, value);
      

  3.   

    addHeader()方法可以实现吧
      

  4.   

    不是客户端,是在服务端,需要给HttpServletRequest新增请求头。
      

  5.   

    不是客户端,是服务端给HttpServletRequest新增请求头。
      

  6.   

    是服务端,不能用httpclient,服务端是spring cloud zuul做反向代理,但是需要新增请求头。
    没有其他办法可以添加么?
      

  7.   

    可以在ajax请求里面加。。
      

  8.   

    不是客户端,是服务端需要新增。

    过滤器里面使用request添加请求头估计不行...写一个类继承HttpServletRequestWrapper重写getHeader方法试试
      

  9.   

    HttpServletRequest  是接口,没有设置header的方法。需要找到HttpServletRequest实现类,然后使用它提供的方法设置header。这个类是由服务容器(如 tomcat)提供的
      

  10.   

    tomcat下的filter实现
    https://tianweili.github.io/2015/01/26/Java中的Filter-过滤器/ http://sandeepmore.com/blog/2010/06/12/modifying-http-headers-using-java/package com.sandeepmore.filters;import java.io.IOException;
    import javax.servlet.*;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpServletResponseWrapper;
    import javax.servlet.http.HttpSession;import java.util.logging.*;public class MyFilterExample implements javax.servlet.Filter {
    private ServletContext servletContext;
    private Logger log;public MyFilterExample(){
    super();
    }public void init(FilterConfig filterConfig) throws ServletException {
    servletContext = filterConfig.getServletContext();
    log = Logger.getLogger(MyFilter.class.getName());
    }public void doFilter( ServletRequest req,
    ServletResponse res,
    FilterChain filterChain)
    throws IOException, ServletException {MyServletRequestWrapper httpReq = new MyServletRequestWrapper((HttpServletRequest)req);
    HttpServletResponse httpRes = (HttpServletResponse)res;HttpSession session = httpReq.getSession();httpReq.addHeader("myHeader", "value");filterChain.doFilter(httpReq, httpRes);}public void destroy(){
    }
    }
      

  11.   

    虽然我也不知道,不过我可以搜索到。参考网上的资料,修改了这么一段代码:
    public class WritableHttpServletRequest extends HttpServletRequestWrapper {
    private final Set<String> names = new HashSet<>();
    private final Map<String, String> headers = new HashMap<>();
    WritableHttpServletRequest(HttpServletRequest request) {
    super(request);
    Enumeration<String> e = super.getHeaderNames();
    while (e.hasMoreElements()) {
    names.add(e.nextElement());
    }
    }
    public void addHeader(String name, String value) {
    headers.put(name, value);
    names.add(name);
    }
    @Override
    public String getHeader(String name) {
            if (headers.containsKey(name)) {
             return headers.get(name);
            } else {
             return super.getHeader(name);
            }
    }
    @Override
    public Enumeration<String> getHeaderNames() {
            return Collections.enumeration(names);
    }
    }// ......
    WritableHttpServletRequest wr = new WritableHttpServletRequest(request);
    wr.addHeader("Referer", "http://bbs.csdn.net");
    doFilterInternal(wr, ...);
    // ......
    PrintWriter out = response.getWriter();
    out.print(result);
      

  12.   

    感谢解答,这种写法应该可以,但是目前因为我使用了zuul,感觉可能是zuul导致转发到下游之后,header丢失了。
    以下是我目前的写法。public class HttpServletRequestCrossFilter extends OncePerRequestFilter {    @Override
        protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
            ModifyHttpServletRequestWrapper httpServletRequestWrapper = new ModifyHttpServletRequestWrapper(request);
            httpServletRequestWrapper.putHeader("Access-Control-Allow-Origin", "*");
            httpServletRequestWrapper.putHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS");
            httpServletRequestWrapper.putHeader("Access-Control-Allow-Headers", "Content-Type");
            httpServletRequestWrapper.putHeader("xxxxxxxxxxxxxxxxxxxxx", "xxxxxxxxxxxxxxxxxxxxxxxxxx");
            filterChain.doFilter(httpServletRequestWrapper, response);
        }}
    public class ModifyHttpServletRequestWrapper extends HttpServletRequestWrapper {    private Map<String, String> customHeaders;    public ModifyHttpServletRequestWrapper(HttpServletRequest request) {
            super(request);
            this.customHeaders = new HashMap<>();
        }    public void putHeader(String name, String value) {
            this.customHeaders.put(name, value);
        }    public String getHeader(String name) {
            String value = this.customHeaders.get(name);
            if (value != null) {
                return value;
            }
            return ((HttpServletRequest) getRequest()).getHeader(name);
        }    public Enumeration<String> getHeaderNames() {
            Set<String> set = new HashSet<>(customHeaders.keySet());
            Enumeration<String> enumeration = ((HttpServletRequest) getRequest()).getHeaderNames();
            while (enumeration.hasMoreElements()) {
                String name = enumeration.nextElement();
                set.add(name);
            }
            return Collections.enumeration(set);
        }}
      

  13.   

    感谢解答,这种写法应该可以,但是目前因为我使用了zuul,感觉可能是zuul导致转发到下游之后,header丢失了,准备看下zuul源码的转发过程了。
    以下是我目前的写法。public class HttpServletRequestCrossFilter extends OncePerRequestFilter {    @Override
        protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
            ModifyHttpServletRequestWrapper httpServletRequestWrapper = new ModifyHttpServletRequestWrapper(request);
            httpServletRequestWrapper.putHeader("Access-Control-Allow-Origin", "*");
            httpServletRequestWrapper.putHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS");
            httpServletRequestWrapper.putHeader("Access-Control-Allow-Headers", "Content-Type");
            httpServletRequestWrapper.putHeader("xxxxxxxxxxxxxxxxxxxxx", "xxxxxxxxxxxxxxxxxxxxxxxxxx");
            filterChain.doFilter(httpServletRequestWrapper, response);
        }}
    public class ModifyHttpServletRequestWrapper extends HttpServletRequestWrapper {    private Map<String, String> customHeaders;    public ModifyHttpServletRequestWrapper(HttpServletRequest request) {
            super(request);
            this.customHeaders = new HashMap<>();
        }    public void putHeader(String name, String value) {
            this.customHeaders.put(name, value);
        }    public String getHeader(String name) {
            String value = this.customHeaders.get(name);
            if (value != null) {
                return value;
            }
            return ((HttpServletRequest) getRequest()).getHeader(name);
        }    public Enumeration<String> getHeaderNames() {
            Set<String> set = new HashSet<>(customHeaders.keySet());
            Enumeration<String> enumeration = ((HttpServletRequest) getRequest()).getHeaderNames();
            while (enumeration.hasMoreElements()) {
                String name = enumeration.nextElement();
                set.add(name);
            }
            return Collections.enumeration(set);
        }}
      

  14.   

    get请求用httpGet.addHeader(name, value);
    post用httpPost.addHeader(name, value);正解.
      

  15.   

    大侠,你最后怎么处理的,怎么给request增加的头部信息,我以前用的方式跟你的一样,现在换成springboot就不起作用了,项目中还没用到zuul,但是现在把原来的代码拿过来,设置的头部信息,怎么都获取不到,其实就没放进去。请问你怎么处理的?
      

  16.   

    你在服务端不是应该是在response里带数据回去吗,服务端还能发request到前端吗
      

  17.   

    https://blog.csdn.net/u010698072/article/details/79973830