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

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

问题描述

我正在与现有的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.

任何想法?

推荐答案

扩展 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天全站免登陆