티스토리 뷰

728x90

스프링 시큐리티 설정클래스가 여러 개 있을 경우 설정 클래스별로 보안작동이 각각 작용하게 된다.

  • 설정클래스 별로 보안 기능이 각각 작동
  • 설정클래스 별로 RequestMathcer 설정
    • http.antMatcher("/admin/**")
  • 설정클래스 별로 필터가 생성
  • FilterChainProxy가 각 필터들을 가지고 있다.
  • 요청에 따라 RequestMatcher와 매칭되는 필터가 작동된다.

1. GET방식으로  /admin 주소로 자원 요청
2. FilterChainProxy에서 요청을 받아 요청을 처리할 필터를 선택
3. 요청 URL과 matches를 하여 true가되는 Filter를 선택해야 한다.
=> FilterChainProxy가 저장하고 있는 각각의 SecurityConfig 객체들에서 RequestMacher의 정보와 매치되는 정보를 찾는다. 
4. 일치하는 객체의 필터를 수행하여 인증/인가 처리를 한다. 

 

코드

@Slf4j
@Configuration
@EnableWebSecurity
@Order(0)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .antMatcher("/admin/**")
                .authorizeRequests()
                .anyRequest().authenticated()
                .and()
                .httpBasic();

    }
}

@Configuration
@Order(1)
class SecurityConfig2 extends WebSecurityConfigurerAdapter {

    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .anyRequest().permitAll()
                .and()
                .formLogin();
    }
}

@Order 애노테이션을 통해서 순서를 정해줄 수 있는데 여기서 주의할 점이 있다.

만약 SecurityConfig2 클래스를 가장 첫 번째 우선순위인 @Order(0)을 주게 돼버리면 최초 /admin의 요청 시에도 인증 없이 그냥 페이지가 보이는 현상이 나타나게 된다. 왜냐하면 SecurityConfig2 클래스의 보안 설정은 모든 요청을 허용하기 때문이다.

설정 범위는 항상 좁은 범위에서 넓은 범위로 향하게 된다.

728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함