在 servlet 过滤器中向请求添加 HTTP 标头 [英] Adding an HTTP Header to the request in a servlet filter

查看:34
本文介绍了在 servlet 过滤器中向请求添加 HTTP 标头的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm integrating with an existing servlet that pulls some properties out of the HTTP header. Basically, I'm implementing an interface that doesn't have access to the actual request, it just has access to a map of k->v for the HTTP headers.

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

I need to pass in a request parameter. The plan is to use a servlet filter to go from parameter to header value but of course the HttpServletRequest object doesn't have an addHeader() method.

有什么想法吗?

推荐答案

Extend HttpServletRequestWrapper,覆盖头部 getter 以返回参数:

Extend HttpServletRequestWrapper, override the header getters to return the parameters as well:

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

..并用它包装原始请求:

..and wrap the original request with it:

chain.doFilter(new AddParamsToHeader((HttpServletRequest) request), response);

<小时>

也就是说,我个人认为这是一个坏主意.而是让它直接访问参数或将参数传递给它.


That said, I personally find this a bad idea. Rather give it direct access to the parameters or pass the parameters to it.

这篇关于在 servlet 过滤器中向请求添加 HTTP 标头的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆