Spring Security 공부를 하다가 오류가 발생했다.
강의에서는 잘 되던 인터페이스 상속이 되지 않는 문제...
찾아보니 이제 지원이 안되고 @Bean 으로 생성해서 써야 한다고 한다.
@Configuration
@EnableWebSecurity
public class SecurityConfig{
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeRequests()
.antMatchers("/user/**").authenticated()
.antMatchers("/manager/**").access("hasAnyRole('ROLE_MANAGER','ROLE_ADMIN')")
.antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
.anyRequest().permitAll();
return http.build();
}
}
위와 같이 생성을 해서 강사님과 맞게 바꿨지만
HttpSecurity가 authorizeRequests()를 deprecate 해서 생긴 문제...
다음 코드를 사용해 해결했다.
@Configuration
@EnableWebSecurity // 스프링 시큐리티 필터가 스프링 필터체인에 등록이 됨
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeHttpRequests()
.requestMatchers("/user/**").authenticated()
.requestMatchers("/manager/**").hasAnyRole("MANAGER", "ADMIN")
.requestMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().permitAll()
.and().formLogin().loginPage("/login");
return http.build();
}
}
👇🏻 정리해 보면 아래와 같다.
.authorizeRequests() → .authorizeHttpRequests()
.antMatchers() → .requestMatchers()
.access("hasAnyRole('ROLE_A','ROLE_B')") → .hasAnyRole("A", "B")
이제 잘 작동된다~~
'Back-end' 카테고리의 다른 글
Springboot와 AWS S3 연동하기(+Controller, formData) (1) | 2023.05.05 |
---|---|
[아키텍처] 마이크로 서비스 아키텍처(MSA) (0) | 2023.04.23 |
[Java: JPA] 01. JPA와 환경설정 (0) | 2023.01.28 |
[Java:Spring Framework] 01. 스프링의 개념 (1) | 2022.12.17 |