I am setting up a project in Kotlin with Spring Security for login support. I am new to Spring Boot, so comments could be helpful. I have problem with Spring Boot not scanning my @Configuration
class and inject the @Bean
defined inside it. However, it recognized the same @Bean
inside the @SpringBootApplication
class.
I am not using WebSecurityConfigurerAdapter
because it is now deprecated.
Using logging.level.org.springframework=DEBUG
, I was able to confirm that spring boot recognized beans only when using @SpringBootApplication
. While using @Configuration
, it did NOT find it.
I don't want the bean to be there. I want to separate the bean into its own configuration file, in a subpackage, using the @Configuration
. How do I do that?
Here is a screenshot of the found bean when debugging, and the bean was defined in @SpringBootApplication
.
Here I have the different relevant class defintions:
Main class
@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)
}
Controller class
@RestController
class MessageResource {
@GetMapping
fun index(): String = "Hello World"
}
SecurityConfig.kt in subpackage
@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()
}
}
Edit 1: Add project structure
CodePudding user response:
This is because your SecurityConfig
is in a package that is not the same package of your DemoApplication
or a child package of the package of DemoApplication
.
To solve it move the package of SecurityConfig
to the package of DemoApplication
. It will then become a child package and should work.