javax.servlet.http.HttpServletRequest怎么添加请求头的...
困扰了很久..
求助各位..
谢谢!!
困扰了很久..
求助各位..
谢谢!!
解决方案 »
- jsp 求一段代码的解释
- 希望大家能够提供一个struts树形菜单,先谢谢了
- jsp页面乱码问题?
- 急! 初学者碰到的一个小问题!
- tomcat的问题
- java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]'@P
- 数据库表维护难题,高分请高手赐教!!!
- 新手提问:“一个关于SERVLET配置”的问题!!
- JSP和JAVA一起啃如何啊?看什么书呢?这方面的书太多了。谢谢
- 今年21岁,接触JAVA到现在有三年了,突然觉得JAVA让我很迷茫
- 求教一个正则表达式问题
- mybatis中注解方式调用存储过程返回参数如何获取
get请求用httpGet.addHeader(name, value);
post用httpPost.addHeader(name, value);
没有其他办法可以添加么?
过滤器里面使用request添加请求头估计不行...写一个类继承HttpServletRequestWrapper重写getHeader方法试试
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(){
}
}
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);
以下是我目前的写法。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);
}}
以下是我目前的写法。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);
}}
post用httpPost.addHeader(name, value);正解.