더이상 WebSecurityConfigurerAdapter를 지원하지 않는다.
spring 공식문서에 가보니 Spring Security 5.7.0-M2 부터는 구성 요소 기반 보안 설정으로 변경된다는 이슈가 있었다.
WebSecurityConfigurerAdapter 상속 후, configure 메소드를 오버라이딩 하여 설정하는 방식에서 SecurityFilterChain를 빈으로 등록하는 방식으로 변경했다고 한다.
// 이전 방식
// WebSecurityConfigurerAdapter 상속 후, configure 메소드 오버라이딩
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeRequests()
.antMatchers("/user/**").authenticated()
.antMatchers("/manager/**").access("hasRole('ROLE_ADMIN') or hasRole('ROLE_MANAGER')")
.antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
.anyRequest().permitAll();
}
}
// 현재 방식
// SecurityFilterChain를 빈으로 등록
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeRequests()
.antMatchers("/user/**").authenticated()
.antMatchers("/manager/**").access("hasRole('ROLE_ADMIN') or hasRole('ROLE_MANAGER')")
.antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
.anyRequest().permitAll();
}
}
추가로 authorizeRequests, antMatcher, hasRole도 더이상 지원하지 않기 때문에 각각 authorizeHttpRequest, requestmatchers, hasAnyAuthority로 바꾸어 사용한다.
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeHttpRequests()
.requestMatchers("/user/**").authenticated()
.requestMatchers("/manager/**").hasAnyAuthority("ROLE_ADMIN", "ROLE_MANAGER")
.requestMatchers("/admin/**").hasAuthority("ROLE_ADMIN")
.anyRequest().permitAll();
return null;
}
여기까지 했으면 localhost:8080로 접속해 원하는 페이지로 연결되는지 확인해보자.
/user, /manager, /admin이 아닌 url은 permitAll()을 해주었기 때문에 시큐리티의 login 페이지가 아닌 원래 페이지가 나와야한다.
그런데 여전히 localhost:8080으로 localhost:8080/login으로 연결된다.
.anyRequest().permitAll();이 제대로 동작하지 않는다.
.anyRequest() 대신 .requestMatchers("/**")로 바꿔주었다.
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeHttpRequests()
.requestMatchers("/user/**").authenticated()
.requestMatchers("/manager/**").hasAnyAuthority("ROLE_ADMIN", "ROLE_MANAGER")
.requestMatchers("/admin/**").hasAuthority("ROLE_ADMIN")
.requestMatchers("/**").permitAll();
return http.build();
}
}
참고
'[Spring]' 카테고리의 다른 글
[Spring Security] 시큐리티 환경 설정과 로그인 (0) | 2023.01.18 |
---|---|
[Spring] 템플릿 엔진 Mustache의 장점 (0) | 2023.01.17 |
[Java] Builder 패턴 (2) | 2023.01.16 |
[Spring] ERROR 1819 (HY000): Your password does not satisfy the current policy requirements. (0) | 2023.01.15 |