相关疑难解决方法(0)

spring-boot ReactiveClientRegistrationRepository 未找到

环境:Spring Boot 2.3.1、Java 11

我已经尝试了一些东西(也与 spring 的示例应用程序进行比较),但到目前为止,我未能成功创建WebClient需要ReactiveClientRegistrationRepository.

启动我的 spring-boot 应用程序时出现以下异常:

required a bean of type 'org.springframework.security.oauth2.client.registration.ReactiveClientRegistrationRepository'
Run Code Online (Sandbox Code Playgroud)

我理解 spring-boot-autoconfigure 的方式应该使用ReactiveOAuth2ClientAutoConfiguration,因为在 yml 文件中给出了所需的属性。

根据一些代码片段,如果缺少某些内容,我可以提供更多信息以获取整个上下文

主级

@Slf4j
@SpringBootApplication
@EnableConfigurationProperties(MyAppConfigurationProperties.class)
public class MyApp{

    public static void main(final String[] args) {
        SpringApplication.run(MyApp.class, args);
    }
}
Run Code Online (Sandbox Code Playgroud)

配置:

@Configuration
//@Import(ReactiveOAuth2ClientAutoConfiguration.class) // in the test it works with this, but should not be required: spring-boot-autoconfigure
public class MyRestClientConfig {

  @Bean
    WebClient myWebClient(WebClient.Builder builder, ReactiveClientRegistrationRepository clientRegistrations) {
//content not relevant to this …
Run Code Online (Sandbox Code Playgroud)

java spring-boot spring-webclient spring-reactive

11
推荐指数
1
解决办法
2万
查看次数

关于spring boot如何正确禁用web环境

Spring启动非Web应用程序,启动时有以下错误

Caused by: org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory(EmbeddedWebApplicationContext.java:185) ~[spring-boot-1.3.5.RELEASE.jar:1.3.5.RELEASE]
Run Code Online (Sandbox Code Playgroud)

然后我尝试了下面的方式

new SpringApplication().setWebEnvironment(false);
Run Code Online (Sandbox Code Playgroud)

然后开始它仍然有上面的错误.

然后试过

@SpringBootApplication(exclude={SpringDataWebAutoConfiguration.class})
Run Code Online (Sandbox Code Playgroud)

但仍然有同样的错误.

最后我尝试添加以下配置 application.properties

spring.main.web-environment=false
Run Code Online (Sandbox Code Playgroud)

这次它有效.

为什么前两种方式不起作用?

spring-boot

9
推荐指数
2
解决办法
2万
查看次数

无法找到带有 Spring Security 5.3.2 ReactiveClientRegistrationRepository bean 的反应式 OAuth2

我正在尝试在反应式客户端应用程序中实现 OAuth2 client_credentials 流。我正在使用网络客户端。我尝试了在互联网上找到的几个例子,但到目前为止没有一个对我有用。我在文档和教程中读到的所有内容都说 ReactiveClientRegistrationRepository bean 是自动配置的,但该 bean 没有为我启动。

请帮助我 - 我迷路了。

Spring Boot 2.2.7.RELEASE Spring Security 5.3.2.RELEASE

这是我的 gradle 依赖项:

    // Spring Boot
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'org.springframework.boot:spring-boot-starter-security'
    implementation 'org.springframework.boot:spring-boot-starter-webflux'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'

    // Spring Security
    implementation 'org.springframework.security:spring-security-oauth2-client:5.3.2.RELEASE'
Run Code Online (Sandbox Code Playgroud)

我的网络客户端配置:

@Configuration
public class WebClientConfiguration {
    @Autowired
    Environment env;

    @Value("${tcs.uri.base}")
    private String uriBaseTCS;

    @Value("${tcs.connection.timeout.millis}")
    private Integer timeoutTCS;

    @Bean("oAuth2WebClient")
    public WebClient oauthFilteredWebClient(ReactiveClientRegistrationRepository clientRegistrationRepository)
    {
        HttpClient httpClient = HttpClient.create()
                .tcpConfiguration(client ->
                        client.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, timeoutTCS)
                                .doOnConnected(conn -> conn
                                        .addHandlerLast(new ReadTimeoutHandler(timeoutTCS, TimeUnit.MILLISECONDS))
                                        .addHandlerLast(new WriteTimeoutHandler(timeoutTCS, TimeUnit.MILLISECONDS))));

        ClientHttpConnector …
Run Code Online (Sandbox Code Playgroud)

spring-security oauth-2.0

5
推荐指数
1
解决办法
7903
查看次数