可以在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
加载中,请稍候......