본문 바로가기

Language/Spring Security

다중 보안 설정

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 변수에 저장

다중 보안 설정 요청 흐름도

  1. 클라이언트 요청
  2. FilterChainProxy가 가지고 있는 SecurityFilterChain의 RequestMatcher를 확인하여 요청 정보와 일치하는 SecurityFilterChain을 선택
    • 양쪽 모두 /api 요청 정보를 받을 수 있지만, Order(1) 설정에 의해서 왼쪽의 SecurityFilterChain이 처리를 하게 됨
  • HttpSecurity 인스턴스별로 보안 기능이 작동
  • 요청에 따라 RequestMatcher와 매칭되는 필터가 작동
728x90