java 我们如何使用过滤器修改请求对象中的标头
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/15294818/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How we can modify headers in request Object using Filter
提问by Prateek Shrivastava
I need to create a Filter and modify header values set in request Object. How we can modify headers in request Object using Filter?, there is no setHeader method available in request Object.
我需要创建一个过滤器并修改请求对象中设置的标头值。我们如何使用过滤器修改请求对象中的标头?,请求对象中没有可用的 setHeader 方法。
回答by Rutesh Makhijani
You can use javax.servlet.http.HttpServletRequestWrapper
to wrap the HttpServletRequest
object passed by the server.
您可以使用javax.servlet.http.HttpServletRequestWrapper
来包装HttpServletRequest
服务器传递的对象。
In the wrapper class you need to override getHeader
method and return modified value of header.
在包装类中,您需要覆盖getHeader
方法并返回标头的修改值。
You can refer to similar post over here Modify request parameter with servlet filter
你可以参考这里的类似帖子用 servlet 过滤器修改请求参数
回答by Josh
You can import Collectors using
您可以使用
import java.util.stream.Collectors;
导入 java.util.stream.Collectors;
Add the method below into your class.
将下面的方法添加到您的类中。
private Map<String, String> convertHeadersToLowerCase(Map<String, String> headers) {
return headers
.entrySet()
.stream()
.collect(Collectors.toMap(entry -> entry.getKey().toLowerCase(), entry -> entry.getValue()));
}
Then before returning headers in the response, you should ensure they are converted before returning by adding the following into the Controller of your Response method:
然后在响应中返回标头之前,您应该通过将以下内容添加到您的 Response 方法的控制器中来确保它们在返回之前被转换:
requestHeaders = convertRequestHeadersToLowerCase(requestHeaders);
requestHeaders = convertRequestHeadersToLowerCase(requestHeaders);