
스프링 부트를 이용해서 스프링 시큐리티를 사용할 경우 위에 구현체를 모두 기본 설정해준다.또한 스프링 시큐리티도 마찬가지로 인터페이스를 통해 상속보다는 구성을 이용하기에 빈으로 해당 구현체들만 우리에 상황에 따라 갈아끼우면 된다.
따라서 앞으로 우리는 각각의 인터페이스를 구현함으로써 각자에게 맞는 맞춤형 보안 설정을 할 수 있을 것이다.
기존에는 WebSecurityConfigurerAdapter를 상속받아 시큐리티 관련 설정을 할 수 있었다. 하지만 Spring Security 5.7이상 버전에서는 각각의 인터페이스를 빈으로 등록함으로써 기본 설정을 할 수 있다.
SecurityFilterChain, UserDetailService등을 빈으로 등록하는 방식은 기존 방식보다 명확하고 유연하며 SpringBoot와 좋은 호환성을 제공한다.
@Bean
fun securityFilterChain(http: HttpSecurity): SecurityFilterChain {
http.httpBasic()
http.authorizeRequests().anyRequest().permitAll()
return http.build()
}
@Bean
fun userDetailsService(): UserDetailsService {
val inMemoryUserDetailsManager = InMemoryUserDetailsManager()
val user = User.withUsername("john")
.password("12345")
.authorities("read")
.build()
inMemoryUserDetailsManager.createUser(user)
return inMemoryUserDetailsManager
}
@Bean
fun passwordEncoder(): PasswordEncoder {
return NoOpPasswordEncoder.getInstance()
}