requestMatcher는 Spring Security에서 특정 요청 경로에 대해 조건을 정의하는 기능입니다. 보안 필터에서 특정 URL이나 HTTP 메소드에 맞는 요청이 들어왔을 때만 필터가 작동하게 설정할 수 있습니다. requestMatcher는 주로 보안 설정을 세분화하거나 CSRF 정책 등을 특정 조건에 맞추어 설정할 때 사용됩니다.
사용 방법
일반적으로 HttpSecurity에서 requestMatchers() 메서드를 사용해 특정 URL 경로나 조건을 설정합니다. antMatchers, mvcMatchers 등의 메서드도 같은 역할을 하지만, requestMatchers는 훨씬 더 다양한 조건을 지원합니다.
http
.authorizeRequests()
.requestMatchers("/admin/**").hasRole("ADMIN") // /admin 하위 경로를 ADMIN 권한으로 제한
.anyRequest().authenticated();
위 코드는 /admin/** 경로로 시작하는 모든 URL에 대해 ADMIN 역할이 있는 사용자만 접근할 수 있도록 설정합니다.
RequestMatcher 사용 예시
1. Custom RequestMatcher 사용하기
RequestMatcher는 단순히 경로나 메소드뿐 아니라 커스텀 조건을 통해 보안 정책을 적용할 수 있습니다. 예를 들어, 요청이 특정 파라미터를 포함하는지 확인하는 RequestMatcher를 작성할 수 있습니다.
public class CustomRequestMatcher implements RequestMatcher {
@Override
public boolean matches(HttpServletRequest request) {
String authToken = request.getParameter("authToken");
return authToken != null && authToken.equals("secureToken");
}
}
이후 HttpSecurity에서 이를 사용해 특정 조건을 추가할 수 있습니다.
http
.authorizeRequests()
.requestMatchers(new CustomRequestMatcher()).authenticated()
.anyRequest().permitAll();
2. HTTP 메소드로 제한
requestMatchers() 메서드를 사용해 HTTP 메소드에 따라 접근을 제어할 수도 있습니다. 예를 들어, POST 요청만 허용하고 싶을 때는 다음과 같이 설정할 수 있습니다.
http
.authorizeRequests()
.requestMatchers(HttpMethod.POST, "/api/secure").authenticated()
.anyRequest().permitAll();
requestMatcher를 활용하는 다양한 예시
1. URL 패턴 매칭
http
.authorizeRequests()
.requestMatchers("/user/**").authenticated() // /user 경로 하위는 인증 필요
.anyRequest().permitAll();
2. HTTP 메소드와 URL 조합 매칭
http
.authorizeRequests()
.requestMatchers(HttpMethod.POST, "/submit").hasAuthority("ROLE_USER") // POST 메서드로 /submit 접근 시 특정 권한 필요
.anyRequest().permitAll();
3. 커스텀 조건 적용
위에서 언급한 CustomRequestMatcher 예시처럼 요청에 포함된 특정 파라미터를 기준으로 접근 제어를 할 수 있습니다.
주요 특징 및 활용 방안
• 정교한 보안 설정: requestMatcher를 통해 단순히 URL 경로가 아닌, 파라미터나 헤더, 메소드 등 다양한 조건을 포함해 세밀한 보안 제어가 가능합니다.
• CSRF 예외 처리: CSRF 정책을 적용하거나 특정 경로에서 예외로 설정할 때 자주 사용됩니다.
이처럼 requestMatcher는 Spring Security의 보안 정책을 더욱 세밀하게 설정할 수 있는 유용한 도구로, 다양한 접근 제어 정책을 구축할 때 활용하기 좋습니다.
'Spring Security' 카테고리의 다른 글
Spring Security 인증 아키텍처 (0) | 2024.10.31 |
---|---|
FilterOrderRegistration 클래스 구조와 역할 (0) | 2024.10.31 |
hasAuthority와 그 외의 다양한 표현식 (0) | 2024.10.30 |
CSRF(Cross-Site Request Forgery) (2) | 2024.10.30 |
@Async (0) | 2024.10.29 |