경주장
[스프링 시큐리티 주요 아키텍처 이해] 다중 설정 클래스 본문
SpringSecurity에서는 다중 설정 클래스를 지원합니다. 여러 설정파일을 생성하여 모두 WebSecurityConfigurationAdapter를 상속받아 요청에 따라 필터기반의 보안처리를 다르게 할 수 있습니다. 요청에따른 적용은 설정 클래스의 requsetMatcher 파라미터와 @Order 어노테이션의 값에 따라 정해집니다.
설정 클래스의 requsetMatcher는 configure 매서드를 override하여 설정합니다. 따로 설정하지 않는다면 any requset에 대해서 적용됩니다.
@EnableWebSecurity
@Order(2)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated();
http
.formLogin();
}
}
@Configuration
@Order(1)
class SecurityConfig2 extends WebSecurityConfigurerAdapter{
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/admin/**")
.authorizeRequests()
.anyRequest().authenticated();
http
.formLogin();
}
}
위와같이 설정하면 /admin/** 에 대해서는 SecurityConfig2가 다른 요청에 대해서는 SecurityConfig가 적용됩니다. 주의 할점은 구체적인 경로의 설정파일이 낮은 Order를 가져야 합니다. Order의 순서가 바뀌면 모든 요청에 대해 SecurityConfig가 적용될 것입니다.
또한 개념적으로 주의할 점은 다중 설정 클래스란 아예 다른 FilterChainProxy의 생성을 의미합니다. 즉, 한 FilterChainProxy를 생성함에 있어 파일을 분리해 적용하고 싶은 경우는 이러한 방식을 적용 할 수 없습니다. 이러한 설정파일의 분리는 SecurityConfigurationAdapter를 상속하여 진행됩니다. (CustomDSL)
@참고
'스프링 > 스프링 시큐리티' 카테고리의 다른 글
[스프링 시큐리티 주요 아키텍처 이해] SecurityContext (0) | 2022.02.08 |
---|---|
[스프링 시큐리티 주요 아키텍처 이해] Authentication (0) | 2022.02.08 |
[스프링 시큐리티 주요 아키텍쳐 이해] DelegatingFilterProxy, FilterChainProxy (0) | 2022.02.07 |
[Form 인증 API] CSRF, CsrfFilter (0) | 2022.02.07 |
[인증/인가 API] 예외 처리 및 요청 캐시 필터 (0) | 2022.02.06 |