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

标签 java spring spring-security oauth

我正在尝试将 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/

相关文章:

java - 创建唯一复合列的语法 - Android SQLiteOpenHelper

java - Spring 集成 Java - 如何使用 @InboundChannelAdapter 检查目录中的文件?

java - 如何对 Java 上的 Microsoft Azure WebApp 进行故障排除?如何访问日志?

java - 如何在成功的 Spring Security OAuth2 身份验证后调用自定义代码

java - Spring 安全 : CookieTheftException with PersistentTokenBasedRememberMeServices

java - Mongodb 对象是否绑定(bind)到单个 Mongod 实例?

java - 运行时 NullPointerException

spring-data-jpa 为您实现存储库

java - Spring Boot不加载application.properties

spring-boot - 如何在 spring boot 中正确配置 ldap 身份验证?每次我登录时,它都会在调用/auth 后重定向到/login