当前位置: 首页 > 面试题库 >

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

田焕
2023-03-14
问题内容

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

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

有任何想法吗?


问题答案:

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

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



 类似资料:
  • 我创建了一个基于wsdl文件的客户机。 这可能是因为web服务是用C#编写的,而且最有可能的是,它需要oasis头,在其中存储用户名和密码值。 我现在能创造的新环境是: 所需的enevelope如下:

  • 我有一个扩展类的类,它看起来像: 问题是,我可以向添加自定义吗?我浏览了和中可用的所有方法,但没有找到任何方法。但是在模式下,我发现在中有的列表。如何在此添加自定义?

  • 我在两台主机上部署了一个Java web应用程序,前面有一个servlet过滤器。我向一台主机上的应用程序发送了一个POST请求,该请求被过滤器拦截并重定向到另一台主机: 在第二台机器上,请求通过过滤器并由资源类中的REST API处理。 对象作为POST请求正文的一部分发送。重定向之后,请求正文不会发送过来,为空。如何在重定向之后保留请求正文(或至少保留请求正文的这一部分)? 谢了。

  • 问题内容: 我想让ETag支持。为此,需要做所有工作。我如何在不声明的情况下添加它(实际上不存在,因为到目前为止我已经不知何故了)? PS我使用Spring Boot 1.1.4 PPS这是一个完整的解决方案 问题答案: When using Spring Boot 如参考文档中所述,唯一的步骤是在配置类中将该过滤器声明为Bean,就这样! When using Spring MVC 你可能已经扩

  • 我想要ETag支持。为此,有一个来完成所有工作。我如何添加它而不在我的中声明它(它实际上并不存在,因为我到目前为止不知怎的没有它)?

  • 问题内容: 我正在尝试找到一种方法,可将请求从过滤器重定向到登录页面,但我不知道如何从servlet重定向。我搜索了,但发现的是方法。我在过滤器的响应对象上找不到此方法。是什么原因 我该如何解决? 问题答案: 在Filter中,响应是而不是。因此将强制转换为。 如果使用上下文路径: 也不要忘记在最后打电话。