我们如何使用过滤器修改请求对象中的标头
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
使用 http 端点访问 lambda 中的 HTTP 请求(标头、查询字符串、cookie、正文)对象