728x90
- Spring Security는 여러 SecurityFilterChain @Bean을 등록해서 다중 보안 기능을 구성 가능
@Configuration
@EnableWebSecurity
public class MultiHttpSecurityConfig {
@Bean
@Order(1)
public SecurityFilterChain apiFilterChain(HttpSecurity http) throws Exception {
http.securityMatcher("/api/**") // HttpSecurity가 /api/로 시작하는 URL 에만 적용
.authorizeHttpRequests(authorize -> authorize .anyRequest().hasRole("ADMIN"))
.httpBasic(withDefaults());
return http.build();
}
@Bean // @Order 가 지정되지 않으면 마지막으로 간주
public SecurityFilterChain formLoginFilterChain(HttpSecurity http) throws Exception {
http .authorizeHttpRequests(authorize -> authorize.anyRequest().authenticated()) // HttpSecurity 가 /api/를 제외한 모든 URL에 적용
.formLogin(withDefaults());
return http.build();
}
}
- @Order를 사용하여 어떤 SecurityFilterChain 을 먼저 수행 할지 지정
→ 아래의 SecurityFilterChain 보다 먼저 보안 기능을 수행 - /api 요청을 제외한 모든 요청은 아래 formLoginFilterChain이 처리
다중 보안 설정 초기화 구성
- 설정한 SecurityFilterChain 객체를 FilterChainProxy에 전달하여 SecurityFilterChains 변수에 저장
다중 보안 설정 요청 흐름도
- 클라이언트 요청
- FilterChainProxy가 가지고 있는 SecurityFilterChain의 RequestMatcher를 확인하여 요청 정보와 일치하는 SecurityFilterChain을 선택
- 양쪽 모두 /api 요청 정보를 받을 수 있지만, Order(1) 설정에 의해서 왼쪽의 SecurityFilterChain이 처리를 하게 됨
- HttpSecurity 인스턴스별로 보안 기능이 작동
- 요청에 따라 RequestMatcher와 매칭되는 필터가 작동
728x90
'Language > Spring Security' 카테고리의 다른 글
Redis를 활용한 이중화 설정 - @EnableRedisHttpSession (0) | 2024.08.03 |
---|---|
Custom DSLs - HttpSecurity.with(AbstractHttpConfigurer) (0) | 2024.08.03 |
Spring MVC 비동기 통합 - WebAsyncManagerIntergrationFilter (0) | 2024.08.03 |
Spring MVC 통합 - @AuthenticationPrincipal (0) | 2024.08.03 |
Servlet API 통합 - SecurityContextHoladerAwareRequestFilter (0) | 2024.08.03 |