본문 바로가기

Language/Spring Security

요청 기반 권한 부여 - HttpSecurity.securityMatcher()

728x90

securityMatcher()

  • securityMatcher 메소드는 특정 패턴에 해당하는 요청에만 보안 규칙을 적용하도록 설정할 수 있으며 중복해서 정의할 경우 마지막에 설정한 것으로 대체
    → 지금까지는 모든 요청에 대해서 위에서부터 순차적으로 검사
메서드 설명
securityMatcher(String... urlPatterns) 특정 자원 보호가 필요한 경로를 정의
securityMatcher(RequestMatcher... requestMatchers) 특정 자원 보호가 필요한 경로를 정의
→ AntPathRequestMatcher, MvcRequestMatcher 등의 구현체를 사용 가능

 

패턴 설정

  • HttpSecurity를 /api/로 시작하는 URL에만 적용하도록 구성
  • Spring MVC가 클래스 경로에 있으면 MvcRequestMatcher가 사용되고, 그렇지 않으면 AntPathRequestMatcher가 사용

securityMatchers(Customizer<RequestMatcherConfigurer>)

  • 다중 패턴 설정
    • securityMatchers 메소드는 특정 패턴에 해당하는 요청을 단일이 아닌 다중 설정으로 구성해서 보안 규칙을 적용할 수 있으며 현재의 규칙은 이전의 규칙을 대체하지 않음 → 현재의 규칙은 이전의 규칙을 대체하지 않음 ⇒ 중복 가능
  • 패턴 유형
// 패턴 1
http.securityMatchers((matchers) -> matchers.requestMatchers("/api/**", "/oauth/**"));
// 패턴 2
http.securityMatchers((matchers) -> matchers.requestMatchers("/api/**").requestMatchers("/oauth/**"));
// 패턴 3
http.securityMatchers((matchers) -> matchers.requestMatchers("/api/**")
 .securityMatchers((matchers) -> matchers.requestMatchers("/oauth/**"));


추가 정리

  • SecurityFilterChain은 여러 개일 수 있음
  • @Order(n) 어노테이션을 이용하여 실행되는 SecurityFilterChain의 순서를 지정할 수 있고, requestMatcher에서 더 좁은 범위를 먼저 선언하는 것처럼 더 좁은 범위의 SecurityFilterChain을 먼저 선언하지 않으면 사용자의 의도대로 실행되지 않음
728x90