gpt4 book ai didi

httprequest - 修改zuul过滤器中的请求头

转载 作者:行者123 更新时间:2023-12-04 01:54:21 26 4
gpt4 key购买 nike

我有一个后端服务,它接受授权 header 来验证访问。我使用 Spring cloud zuul 创建了一个网关服务,并将请求路由到后端服务。

网关服务本身受 OAuth2 保护,并接受授权 header 以验证访问。现在,一旦请求授权网关服务,网关服务将充当客户端,使用它的客户端 ID、 secret 和后端服务资源 ID 在 header 中发送更新的访问 token 。由于它必须发送 Authorization header ,我试图更新请求中的 Authorization header ,但它采用以下两种方式。

ctx = RequestContext.getCurrentContext();
ctx.addZuulRequestHeader("Authorization", accessToken);

使用上面的代码,它添加了 Authorization header ,但将其添加到后端服务无法识别的 zuul header 中。

我创建了一个包装器来修改请求对象,但它不起作用
public class RequestWrapper extends HttpServletRequestWrapper
{
private final Map<String, String[]> modifiableParameters;
private Map<String, String[]> allParameters = null;

public RequestWrapper(final HttpServletRequest request,
final Map<String, String[]> additionalParams)
{
super(request);
modifiableParameters = new TreeMap<String, String[]>();
modifiableParameters.putAll(additionalParams);
}

@Override
public String getParameter(final String name)
{
String[] strings = getParameterMap().get(name);
if (strings != null)
{
return strings[0];
}
return super.getParameter(name);
}

@Override
public Map<String, String[]> getParameterMap()
{
if (allParameters == null)
{
allParameters = new TreeMap<String, String[]>();
allParameters.putAll(super.getParameterMap());
allParameters.putAll(modifiableParameters);
}

return Collections.unmodifiableMap(allParameters);
}

@Override
public Enumeration<String> getParameterNames()
{
return Collections.enumeration(getParameterMap().keySet());
}

@Override
public String[] getParameterValues(final String name)
{
return getParameterMap().get(name);
}
}

以上 wrapper 来自 http://www.ocpsoft.org/opensource/how-to-safely-add-modify-servlet-request-parameter-values/
并在 zuul 过滤器中调用它
    authToken = getAuthToken();     
String accessToken = "Bearer " + authToken;
Map<String,String[]> additionalParams = new HashMap<>();

additionalParams.put("Authorization", new String[] {accessToken});
ctx.setRequest(new RequestWrapper(request, additionalParams));

我在做什么错或修改请求 header 的任何其他方式?

最佳答案

如果您询问如何向 Zuul 请求添加 header ,您的代码是正确的,但您应该验证过滤器类型(Pre、Route、Post 等)和 订购 你的过滤器。

检查此线程:Adding Headers to Zuul when re-directing

也许这也有帮助:How to select route based on header in Zuul

如果需要通过Zuul授权给后端服务,可以查看sensitiveHeaders属性(property)。就像是 :
zuul.routes.YOURSERVICE.sensitiveHeaders=Cookie,Set-Cookie

关于httprequest - 修改zuul过滤器中的请求头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51431166/

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