加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

java在request中添加或者修改header

(2014-01-24 22:58:12)
分类: java
可以在Filter对Request做包装

上代码:
Filter部分

package test;
 
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
 
public class TestFilter implements Filter{
 
    public void destroy() {
         
    }
 
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain fc) throws IOException, ServletException {
        HttpServletRequest oldRequest = (HttpServletRequest) request;
        // 打印原始数据
        System.out.println("OLD REQUEST HEADER:");
        Enumeration enumeration = oldRequest.getHeaderNames();
        while(enumeration.hasMoreElements()) {
            String name = (String) enumeration.nextElement();
            System.out.println(name + "=" + oldRequest.getHeader(name));
        }
        // 包装新的客户化Request
        ChangedRequest newRequest = new ChangedRequest(oldRequest);
         
        // 添加新的HEADER
        newRequest.addHeader("TestMyHeader", "This is a test");
        fc.doFilter(newRequest, response);
    }
 
    public void init(FilterConfig arg0) throws ServletException {
         
    }
     
     
 
}


Request包装类:

package test;
 
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
 
public class ChangedRequest extends HttpServletRequestWrapper implements Enumeration{
 
    private Map headerMap;
     
    public ChangedRequest(HttpServletRequest request) {
        super(request);
         
        // 提取原本的HEADER内容
        Enumeration enumeration = request.getHeaderNames();
        headerMap = new HashMap();
        while(enumeration.hasMoreElements()) {
            String name = (String) enumeration.nextElement();
            headerMap.put(name, request.getHeader(name));
        }
    }
 
    public Map getHeaderMap() {
        return headerMap;
    }
     
    public void setHeaderMap(Map headerMap) {
        this.headerMap = headerMap;
    }
     
    public void addHeader(String name,String value) {
        headerMap.put(name, value);
    }
     
   
    @Override
    public String getHeader(String name) {
        return headerMap.get(name);
    }
     
    @Override
    public Enumeration getHeaderNames() {
        return this;
    }
     
   
    @Override
    public Enumeration getHeaders(String name) {
        return null;
    };
 
   
    Set mapKeySet;
    Iterator mapKeySetIt;
    public boolean hasMoreElements() {
        if(mapKeySet == null) {
            mapKeySet = headerMap.keySet();
            mapKeySetIt = mapKeySet.iterator();
        }
         
        return mapKeySetIt.hasNext();
    }
 
    public String nextElement() {
        return mapKeySetIt.next();
    }
}


servlet测试代码:

package test;
 
import java.io.IOException;
import java.util.Enumeration;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class Test extends HttpServlet {
 
    public void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        System.out.println();
        System.out.println("CHANGED REQUEST HEADER:");
        Enumeration enumeration = request.getHeaderNames();
        while(enumeration.hasMoreElements()) {
            String name = (String) enumeration.nextElement();
            System.out.println(name + "=" + request.getHeader(name));
        }
    }
 
}


在你的servlet上采用这个Filter,就可以自己去添加Header部分
以下是测试打印内容

OLD REQUEST HEADER:
accept=text/html, application/xhtml+xml, **
user-agent=Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
accept-encoding=gzip, deflate
TestMyHeader=This is a test

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有