spring-security 为什么Sping Boot 无法识别子包@Configuration中的@Bean?

xvw2m8pv  于 2022-11-11  发布在  Spring
关注(0)|答案(1)|浏览(259)

我正在Kotlin中设置一个带有Spring Security的登录支持项目。我是Sping Boot 的新手,所以评论可能会有帮助。我遇到了Spring Boot没有扫描我的@Configuration类并注入其中定义的@Bean的问题。但是,它在@SpringBootApplication类中识别出了相同的@Bean
我没有使用WebSecurityConfigurerAdapter,因为它现在已被弃用。
使用logging.level.org.springframework=DEBUG时,我可以确认Sping Boot 只在使用@SpringBootApplication时识别bean。而在使用@Configuration时,它没有找到bean。
我不希望bean在那里。我想使用@Configuration将bean分离到它自己的配置文件中,在一个子包中。我该怎么做呢?
下面是调试时找到的bean的屏幕截图,bean是在@SpringBootApplication中定义的。

这里有不同的相关类定义:

主类
@SpringBootApplication
class DemoApplication {
    // @Bean  // <--- this bean is recognized
    // fun pilterChain(http: HttpSecurity): SecurityFilterChain {
    //  http.authorizeRequests().anyRequest().anonymous().and().formLogin().and().httpBasic()
    //  return http.build()
    // }
}

fun main(args: Array<String>) {
    runApplication<DemoApplication>(*args) 
}
控制器类
@RestController
class MessageResource {
    @GetMapping
    fun index(): String = "Hello World"
}
子包中的SecurityConfig.kt
@Configuration
class SecurityConfig {
    @Bean // <--- this bean is not recognized
    fun pilterChain(http: HttpSecurity): SecurityFilterChain {
        http.authorizeRequests().anyRequest().anonymous().and().formLogin().and().httpBasic()
        return http.build()
    }
}

编辑1:添加项目结构

8i9zcol2

8i9zcol21#

这是因为您的SecurityConfig所在的套件与您的DemoApplication不是同一个套件,也不是DemoApplication套件的子套件。
要解决这个问题,请将SecurityConfig的包移到DemoApplication的包中,这样它就变成了一个子包,应该可以正常工作。

相关问题