왜?
스프링 인 액션 책을 보며 Spring Security를 적용중 WebSecurityConfigurerAdapter가 Deprecated 된 것을 확인하였다.
왜 deprecated 됐고 대처방안은 무엇인지 궁금하여 검색을 해본 결과 공식문서에서 해당 내용을 확인할 수 있었다.
https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter
Spring Security 5.7.0-M2 부터는 WebSecurityConfigurerAdapter을 사용하는 대신 컴포넌트 기반의 Security Configuration을 사용하는 것을 권장한다고 한다.
여기서 명확한 이유를 알고 싶어서 더 검색을 해본 결과
WebMvcConfigurer 는 Java 8이 기본이 되면서 default method 를 가지고있기 때문에 adapter(추상클래스)를 사용하지 않아도 바로 구현이 가능하기 때문이라고 한다.
대처방안
기존의 Adapter 방식
public class SecurityConfig extends WebSecurityConfigurerAdapter
{
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/design","orders")
.hasRole("USER")
.antMatchers("/","/**").permitAll()
.and()
.httpBasic();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("user1")
.password("{noop}password1")
.authorities("ROLE_USER")
.and()
.withUser("user2")
.password("{noop}password2")
.authorities("ROLE_USER");
}
}
공식문서에서 권장하는 방식
public class SecurityConfig
{
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/design","orders")
.hasRole("USER")
.antMatchers("/","/**").permitAll()
.and()
.httpBasic();
return http.build();
}
@Bean
public InMemoryUserDetailsManager userDetailsService() {
UserDetails user = User.withDefaultPasswordEncoder()
.username("user")
.password("password")
.roles("USER")
.build();
UserDetails user2 = User.withDefaultPasswordEncoder()
.username("user2")
.password("password2")
.roles("USER")
.build();
return new InMemoryUserDetailsManager(user, user2);
}
}
'프로그래밍 > Spring' 카테고리의 다른 글
[Spring] application.yml과 application.properties 차이 (0) | 2022.10.11 |
---|---|
[Spring] Spring Cloud Eureka Server를 만들어보자 (0) | 2022.10.10 |
템플릿 캐싱에 대해 (0) | 2022.06.14 |