我正在与现有的servlet集成,该servlet从HTTP标头中提取一些属性。基本上,我实现的接口无法访问实际请求,它只能访问HTTP标头的k-> v映射。
我需要传递一个请求参数。计划是使用servlet过滤器从参数到标头值,但是HttpServletRequest对象当然没有addHeader()方法。
有任何想法吗?
Extend HttpServletRequestWrapper,覆盖标头吸气剂以返回参数:
HttpServletRequestWrapper
public class AddParamsToHeader extends HttpServletRequestWrapper { public AddParamsToHeader(HttpServletRequest request) { super(request); } public String getHeader(String name) { String header = super.getHeader(name); return (header != null) ? header : super.getParameter(name); // Note: you can't use getParameterValues() here. } public Enumeration getHeaderNames() { List<String> names = Collections.list(super.getHeaderNames()); names.addAll(Collections.list(super.getParameterNames())); return Collections.enumeration(names); } }
..并用它包装原始请求:
chain.doFilter(new AddParamsToHeader((HttpServletRequest) request), response);
也就是说,我个人认为这是个坏主意。而是给它直接访问参数或将参数传递给它的权限。