一尘不染

在Servlet过滤器中向请求添加HTTP标头

java

我正在与现有的servlet集成,该servlet从HTTP标头中提取一些属性。基本上,我实现的接口无法访问实际请求,它只能访问HTTP标头的k->
v映射。

我需要传递一个请求参数。计划是使用servlet过滤器从参数到标头值,但是HttpServletRequest对象当然没有addHeader()方法。

有任何想法吗?


阅读 213

收藏
2020-09-08

共1个答案

一尘不染

Extend
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);

也就是说,我个人认为这是个坏主意。而是给它直接访问参数或将参数传递给它的权限。

2020-09-08