gpt4 book ai didi

spring - 基于 HTTPS/SSL 的 AWS ELB 背后的 Zuul

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

我有一个 AWS Elastic Load Balancer使用我的域的证书并终止 SSL交通。 ELBhttps 上有一个监听器端口并将其转发为 httpZuul .

当我使用 Spring Boot HATEOAS , Zuul 将用正确的地址替换链接,但用 http而不是 https :

"_links": {
"self": {
"href": "http://my.domain.com:80/rest/foo/bar"
}
}

但我想要的是:
"_links": {
"self": {
"href": "https://my.domain.com/rest/foo/bar"
}
}

生成此响应的请求是通过 https 发出的

因为 Zuul在 ELB 后面我猜它不知道它应该通过 https 接收流量。

有没有办法告诉 Zuulhttps 替换链接即使它通过 http 接收未加密的流量?

我想另一种方法是部署 Zuulhttps使用自签名证书,但如果可以的话,我宁愿避免这种复杂情况。

最佳答案

根据 Zuul 团队的建议,可以通过添加 pre 来解决此问题。 Zuul 过滤器,在 PreDecorationFilter 之后应用(顺序 5):

new ZuulFilter() {
@Override
public String filterType() {
return "pre";
}

@Override
public int filterOrder() {
return 6; //PreDecorationFilter=5 + 1
}

@Override
public boolean shouldFilter() {
return true;
}

@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
log.info(String.format("Before filter ['%s': '%s', '%s': '%s']",
ZuulHeaders.X_FORWARDED_PROTO.toLowerCase(),
ctx.getZuulRequestHeaders().get(ZuulHeaders.X_FORWARDED_PROTO.toLowerCase()),
"X-Forwarded-Port",
ctx.getZuulRequestHeaders().get("x-forwarded-port")));


final String originalXForwardedProto = ctx.getRequest().getHeader(ZuulHeaders.X_FORWARDED_PROTO.toLowerCase());
final String originalXForwardedPort = ctx.getRequest().getHeader("x-forwarded-port");

if (!StringUtils.isEmpty(originalXForwardedProto)) {
ctx.addZuulRequestHeader(ZuulHeaders.X_FORWARDED_PROTO.toLowerCase(), originalXForwardedProto);
}

if (!StringUtils.isEmpty(originalXForwardedPort)) {
ctx.addZuulRequestHeader("x-forwarded-port", originalXForwardedPort);
}

log.info(String.format("After filter ['%s': '%s', '%s': '%s']",
ZuulHeaders.X_FORWARDED_PROTO.toLowerCase(),
ctx.getZuulRequestHeaders().get(ZuulHeaders.X_FORWARDED_PROTO.toLowerCase()),
"X-Forwarded-Port",
ctx.getZuulRequestHeaders().get("x-forwarded-port")));

return null;
}
};
}

关于spring - 基于 HTTPS/SSL 的 AWS ELB 背后的 Zuul,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38464001/

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