gpt4 book ai didi

java - 我们如何从 "Authorization"中删除 'HttpServletRequest' header

转载 作者:行者123 更新时间:2023-11-30 06:57:18 26 4
gpt4 key购买 nike

我们如何从“HttpServletRequest”中删除“Authorization” header 。

我们有 2 个过滤器,在第一个过滤器之后,我们需要在将请求传递给第二个过滤器之前从请求中删除“授权” header 。我知道我们可以使用

添加标题
    HttpServletRequest req = (HttpServletRequest) request;

HeaderMapRequestWrapper requestWrapper = new HeaderMapRequestWrapper(req);

//requestWrapper.addHeader("Authorization", "PPPPPPPP");

requestWrapper.removeHeader("Authorization"); // Did not work

public void removeHeader(String name) {
headerMap.remove(name);
}

但我们如何才能删除“授权” header 。

最佳答案

一个可能的解决方案是将原始请求包装在一个自定义的 HttpServletRequestWrapper 中,它覆盖了 getHeadergetHeadersgetHeaderNames 方法:

request = new HttpServletRequestWrapper(request) {
private Set<String> headerNameSet;

@Override
public Enumeration<String> getHeaderNames() {
if (headerNameSet == null) {
// first time this method is called, cache the wrapped request's header names:
headerNameSet = new HashSet<>();
Enumeration<String> wrappedHeaderNames = super.getHeaderNames();
while (wrappedHeaderNames.hasMoreElements()) {
String headerName = wrappedHeaderNames.nextElement();
if (!"Authorization".equalsIgnoreCase(headerName)) {
headerNameSet.add(headerName);
}
}
}
return Collections.enumeration(headerNameSet);
}

@Override
public Enumeration<String> getHeaders(String name) {
if ("Authorization".equalsIgnoreCase(name)) {
return Collections.<String>emptyEnumeration();
}
return super.getHeaders(name);
}

@Override
public String getHeader(String name) {
if ("Authorization".equalsIgnoreCase(name)) {
return null;
}
return super.getHeader(name);
}
};

关于java - 我们如何从 "Authorization"中删除 'HttpServletRequest' header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33612555/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com