gpt4 book ai didi

java - 如何在代理后面使用 spring-security OAuth2,但仅将 ForwardedHeaderTransformer 用于 OAuth 组件

转载 作者:行者123 更新时间:2023-12-01 17:10:01 31 4
gpt4 key购买 nike

我正在尝试将 Spring Cloud Gateway 与 Discovery Client 与 Spring Security 与 OAuth 合并。除了无法同时执行 OAuth 和 Discovery Client 之外,我的大部分工作都已完成。

当我使用 Discovery Client 时,它会正确解析服务,例如 /v1/whoami 转到请求 /whoami 服务,当我启用安全性,当它尝试请求 /oauth/authorization/google 时,我会收到 404,因为它应该是 /v1/oauth/authorization/google

为了解决上述问题,我添加了这个

    @Bean
public ForwardedHeaderTransformer forwardedHeaderTransformer() {
return new ForwardedHeaderTransformer();
}

但是,当我这样做时,它会将/v1/whoami 查找为不存在的/v1/whoami。

我尝试创建并注册此类,但它也不起作用

public class ForwardedHeaderTransformerForOAuthOnly extends ForwardedHeaderTransformer {
@Override
public ServerHttpRequest apply(ServerHttpRequest request) {

System.out.println(">>>> " + request.getPath().value());
if (isOauth(request)) {
System.out.println(">>>> IS OAUTH");
return super.apply(request);
}
return request;
//return super.apply(request);
}

private boolean isOauth(ServerHttpRequest request) {
return request.getPath().value().startsWith("/oauth2/authorization/") || request.getPath().value().startsWith("/login/oauth2/code/");
}
}

最佳答案

我添加了以下内容,以在服务 ID 之前使用前缀。

spring:
cloud:
gateway:
discovery:
locator:
predicates:
- Path='/*/'+serviceId+'/**'
filters:
- StripPrefix=2

结合添加

@Bean
public ForwardedHeaderTransformer forwardedHeaderTransformer() {
return new ForwardedHeaderTransformer();
}

关于java - 如何在代理后面使用 spring-security OAuth2,但仅将 ForwardedHeaderTransformer 用于 OAuth 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61436781/

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