在 spring-boot 中使用 @EnableWebFluxSecurity 时出错

Posted

技术标签:

【中文标题】在 spring-boot 中使用 @EnableWebFluxSecurity 时出错【英文标题】:Error when using @EnableWebFluxSecurity in spring-boot 【发布时间】:2021-10-13 07:21:34 【问题描述】:

我正在尝试设置一个简单的 Spring Boot 应用程序。不用@EnableWebFluxSecurity注解就可以启动了。

    @Configuration
    @EnableWebFluxSecurity
    open class ArticleWebSecurityConfig 

        @Bean
        open fun springSecurityFilterChain(http: ServerHttpSecurity): SecurityWebFilterChain = http
            .csrf().disable()
            .authorizeExchange()
            .anyExchange()
            .permitAll()
            .and()
            .build()
    

启动时出现以下错误:

ConfigServletWebServerApplicationContext : 遇到异常 在上下文初始化期间 - 取消刷新尝试: org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名称为“defaultSecurityFilterChain”的 bean 时出错 类路径资源 [org/springframework/boot/autoconfigure/security/servlet/SpringBootWebSecurityConfiguration.class]: 通过方法表达的不满足的依赖关系 'defaultSecurityFilterChain' 参数 0;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: 否 符合条件的 bean 类型 'org.springframework.security.config.annotation.web.builders.HttpSecurity' 可用:预计至少有 1 个符合 autowire 条件的 bean 候选人。依赖注释:

说明

org.springframework.boot.autoconfigure.security.servlet.SpringBootWebSecurityConfiguration 中方法 defaultSecurityFilterChain 的参数 0 需要一个找不到的 'org.springframework.security.config.annotation.web.builders.HttpSecurity' 类型的 bean。

行动:

考虑在你的配置中定义一个 'org.springframework.security.config.annotation.web.builders.HttpSecurity' 类型的 bean。

进程以退出代码 1 结束

我使用了以下@Bean,但仍然得到相同的错误。

    @Throws(Exception::class)
    @Bean
    open fun configure(http: HttpSecurity) 
        http
            .authorizeRequests()
            .anyRequest()
            .authenticated()
            .and()
            .httpBasic()
    

这些是我的依赖项

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

【问题讨论】:

“配置”bean 需要一个自动装配的 HttpSecurity bean 作为其参数。你需要定义一个 HttpSecurity bean,你可以在同一个类中进行。 @TomElias 你能回答这个问题吗?我没明白你的真正意思。 能否提供一个可重现的小例子 【参考方案1】:

你需要根据this answer添加@EnableWebFluxSecurity@Configuration

【讨论】:

不,它不起作用。我刚刚更新了我的问题。

以上是关于在 spring-boot 中使用 @EnableWebFluxSecurity 时出错的主要内容,如果未能解决你的问题,请参考以下文章

在 spring-boot 中使用一个模板引擎渲染多个后缀

在 spring-boot 项目中使用 spring mvc xml 项目

在 spring-boot 中使用 @EnableWebFluxSecurity 时出错

如何在 spring-boot 中禁用 spring-data-mongodb 自动配置

使用spring-boot在Jpa查询中出错

Vaadin 10没有在Spring-Boot中使用模板