我使用 OAuth2 客户端启动器以及
provider
和 registration
应用程序属性创建了一个非常简单的反应式 (webflux) 应用程序,但 ReactiveOAuth2AuthorizedClientManager
不是自动配置的。知道为什么吗?
这是我的pom:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.c4-soft.springaddons.sample</groupId>
<artifactId>http-exchange-reactive</artifactId>
<version>0.0.1-SNAPSHOT</version>
<description>Resource server with custom authentication manager</description>
<properties>
<java.version>21</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
应用属性:
keycloak-base-uri: https://localhost:8443/auth
issuer: ${keycloak-base-uri}/realms/master
keycloak-admin-api-consumer-secret: change-me
spring:
security:
oauth2:
client:
provider:
keycloak:
issuer-uri: ${issuer}
registration:
backend-with-client-credentials:
provider: keycloak
authorization-grant-type: client_credentials
client-id: keycloak-admin-api-consumer
client-secret: ${keycloak-admin-api-consumer-secret}
scope: openid
最简单的再现器:
@SpringBootApplication
public class HttpClientReactiveApplication {
public static void main(String[] args) {
SpringApplication.run(HttpClientReactiveApplication.class, args);
}
@Bean
Converter<String, String> failToInject(ReactiveOAuth2AuthorizedClientManager authorizedClientManager) {
return source -> source;
}
}
当我尝试启动应用程序时,我得到:
2024-02-19T15:01:51.575-10:00[0;39m [32m INFO[0;39m [35m21168[0;39m [2m---[0;39m [2m[ main][0;39m [2m[0;39m[36mc.c.o.HttpClientReactiveApplication [0;39m [2m:[0;39m Starting HttpClientReactiveApplication using Java 21 with PID 21168 (D:\workspaces\libs\http-client-reactive\target\classes started by ch4mp in D:\workspaces\libs\http-client-reactive)
[2m2024-02-19T15:01:51.577-10:00[0;39m [32m INFO[0;39m [35m21168[0;39m [2m---[0;39m [2m[ main][0;39m [2m[0;39m[36mc.c.o.HttpClientReactiveApplication [0;39m [2m:[0;39m No active profile set, falling back to 1 default profile: "default"
[2m2024-02-19T15:01:52.949-10:00[0;39m [33m WARN[0;39m [35m21168[0;39m [2m---[0;39m [2m[ main][0;39m [2m[0;39m[36monfigReactiveWebServerApplicationContext[0;39m [2m:[0;39m Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'failToInject' defined in com.c4soft.openfeign.HttpClientReactiveApplication: Unsatisfied dependency expressed through method 'failToInject' parameter 0: No qualifying bean of type 'org.springframework.security.oauth2.client.ReactiveOAuth2AuthorizedClientManager' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
[2m2024-02-19T15:01:52.966-10:00[0;39m [32m INFO[0;39m [35m21168[0;39m [2m---[0;39m [2m[ main][0;39m [2m[0;39m[36m.s.b.a.l.ConditionEvaluationReportLogger[0;39m [2m:[0;39m
Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
[2m2024-02-19T15:01:52.995-10:00[0;39m [31mERROR[0;39m [35m21168[0;39m [2m---[0;39m [2m[ main][0;39m [2m[0;39m[36mo.s.b.d.LoggingFailureAnalysisReporter [0;39m [2m:[0;39m
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 0 of method failToInject in com.c4soft.openfeign.HttpClientReactiveApplication required a bean of type 'org.springframework.security.oauth2.client.ReactiveOAuth2AuthorizedClientManager' that could not be found.
Action:
Consider defining a bean of type 'org.springframework.security.oauth2.client.ReactiveOAuth2AuthorizedClientManager' in your configuration.
知道为什么
ReactiveOAuth2AuthorizedClientManager
没有自动配置吗?
我遇到同样的错误:
org.springframework.security.config.annotation.web.reactive.ReactiveOAuth2ClientConfiguration$OAuth2ClientWebFluxSecurityConfiguration 中方法 setAuthorizedClientManagerRegistrar 的参数 0 需要一个类型为 'org.springframework.security.config.annotation.web.reactive.ReactiveOAuth2ClientConfiguration$ReactiveOAuth2AuthorizedClientManagerRegistrar' 的 bean找不到。