我们如何使用过滤器修改请求对象中的标头

Posted

技术标签:

【中文标题】我们如何使用过滤器修改请求对象中的标头【英文标题】:How we can modify headers in request Object using Filter 【发布时间】:2013-02-24 01:06:20 【问题描述】:

我需要创建一个过滤器并修改请求对象中设置的标头值。我们如何使用Filter修改请求对象中的标头?,请求对象中没有可用的setHeader方法。

【问题讨论】:

你说的是 HTTP 吗? 是 HttpServletRequest 请求对象 为此目的使用HttpServletRequestWrapper 【参考方案1】:

您可以使用javax.servlet.http.HttpServletRequestWrapper 来包装服务器传递的HttpServletRequest 对象。

在包装类中你需要重写getHeader方法并返回header的修改值。

你可以在这里参考类似的帖子Modify request parameter with servlet filter

【讨论】:

【参考方案2】:

您可以使用

导入收集器

导入 java.util.stream.Collectors;

将以下方法添加到您的类中。

private Map<String, String> convertHeadersToLowerCase(Map<String, String> headers) 
    return headers
            .entrySet()
            .stream()
            .collect(Collectors.toMap(entry -> entry.getKey().toLowerCase(), entry -> entry.getValue()));

然后在响应中返回标头之前,您应该确保它们在返回之前通过将以下内容添加到您的响应方法的控制器中:

requestHeaders = convertRequestHeadersToLowerCase(requestHeaders);

【讨论】:

OP 询问是否修改 request 中的标头,而不是 response

以上是关于我们如何使用过滤器修改请求对象中的标头的主要内容,如果未能解决你的问题,请参考以下文章

如何在所有请求标头中传递授权令牌 - Spring Boot java

我们可以使用过滤器代替 Servlet 吗?

使用 http 端点访问 lambda 中的 HTTP 请求(标头、查询字符串、cookie、正文)对象

如何在 Tomcat 中添加自定义标头?

#yyds干货盘点#☕并发技术系列「Web请求读取系列」如何构建一个可重复读取的Request的流机制

使用 HTTP Web 请求发送 HTTP 标头以进行 NTLM 身份验证