이번 장에서는 다음과 같은 내용을 다룹니다:
- 필터 체인 작업하기
- 사용자 정의 필터 정의하기
- Spring Security 필터 인터페이스 구현하기
HTTP 필터와 필터 체인
Spring Security에서 HTTP 필터는 HTTP 요청에 보안 관련 작업을 적용하는 중요한 역할을 합니다. 필터는 각각의 보안 기능을 담당하며, 요청이 서버로 들어올 때마다 순차적으로 필터 체인 내에서 처리됩니다. 각 필터는 특정한 작업을 수행한 후, 그 결과에 따라 다음 필터로 요청을 넘기거나, 필요에 따라 요청 처리를 중단하고 응답을 바로 반환할 수도 있습니다.
예를 들어:
- 인증 필터는 사용자의 신원을 확인하고 인증을 처리합니다.
- 권한 부여 필터는 사용자가 요청한 작업을 수행할 권한이 있는지 확인합니다.
- CSRF 보호 필터는 CSRF 공격을 방지하는 역할을 합니다.
이러한 필터들이 순차적으로 적용되는 필터 체인은 애플리케이션의 보안 작업을 모듈화하여 관리할 수 있게 해줍니다.
공항과 필터 체인의 비유
공항에서의 비행기 탑승 과정을 예로 들어, 여러 단계의 보안 필터를 거치는 과정을 설명할 수 있습니다.
- 티켓 확인 → 여권 검증 → 보안 검사
- 탑승 직전의 검증 (필터 추가 가능)
마찬가지로, Spring Security에서는 HTTP 요청이 들어오면 여러 필터들이 순차적으로 적용되어 요청을 처리합니다. 이러한 필터들은 요청의 보안을 강화하며, 필요시 사용자 정의 필터를 추가하여 보안 체인을 커스터마이징할 수 있습니다.
필터 체인 커스터마이즈하기
Spring Security는 기본적으로 제공하는 필터 외에도 사용자 정의 필터를 정의할 수 있도록 지원합니다. 예를 들어, 특정 애플리케이션에서는:
- 이메일 주소 검증 또는 일회용 비밀번호(OTP) 인증 절차를 추가할 수 있습니다.
- 인증 감사 (successful 또는 failed authentication 기록) 또는 로그인 이벤트 추적 기능을 추가할 수 있습니다.
필터 체인에서 각 필터의 순서나 내용을 변경하여, 애플리케이션의 보안 요구사항에 맞게 필터를 조정할 수 있습니다.
필터 체인의 유연성
Spring Security는 필터 체인의 기존 필터를 앞에 추가, 뒤에 추가, 또는 기존 위치에 추가하는 방식으로 사용자 정의할 수 있는 유연성을 제공합니다. 이를 통해, 인증 및 요청/응답 과정에서 발생하는 다양한 보안 작업을 자유롭게 구성하고 적용할 수 있습니다.
요약
- Spring Security의 HTTP 필터는 요청이 서버로 들어올 때마다 순차적으로 보안 작업을 수행하는 역할을 합니다.
- 필터 체인은 이러한 필터들이 연결되어, 요청을 처리하고 보안을 강화하는 구조입니다.
- 기본 필터 외에도 사용자 정의 필터를 추가하여, 인증 절차 강화, 인증 감사, 외부 시스템 알림 등 다양한 기능을 구현할 수 있습니다.
- 필터 체인은 요청과 응답 처리 과정에서 유연하게 커스터마이징할 수 있습니다.
5.1 스프링 시큐리티 아키텍처에서 필터 구현하기
이 섹션에서는 Spring Security에서 필터와 필터 체인이 어떻게 작동하는지에 대해 설명합니다. HTTP 요청을 처리하는 데 사용되는 필터들이 어떻게 구성되고 작동하는지 이해하는 것은 이 장에서 다룰 구현 예제를 이해하는 데 필요합니다.
필터 체인 및 필터 구현
Spring Security에서 필터는 HTTP 필터로, jakarta.servlet 패키지의 Filter 인터페이스를 구현하여 생성됩니다. 이 필터들은 요청을 처리하기 위해 doFilter() 메소드를 오버라이드해야 합니다. doFilter() 메소드는 세 가지 파라미터를 받습니다:
- ServletRequest: HTTP 요청을 나타내며 요청의 세부 정보를 제공합니다.
- ServletResponse: HTTP 응답을 나타내며 응답을 클라이언트에게 돌려보내기 전에 수정할 수 있습니다.
- FilterChain: 필터 체인을 나타내며 요청을 다음 필터로 전달하는 역할을 합니다.
Spring Boot 3부터 Jakarta EE가 기존의 Java EE를 대체하면서, javax.servlet 패키지는 이제 jakarta.servlet 패키지로 변경되었습니다. 예를 들어, Filter, ServletRequest, ServletResponse는 모두 jakarta.servlet에서 찾을 수 있습니다.
필터 체인의 동작
Spring Security에서는 기본적으로 몇 가지 필터를 제공하며, 이를 통해 다양한 보안 작업을 처리합니다. 이러한 필터들은 정의된 순서대로 필터 체인 내에서 실행됩니다. 대표적인 필터에는 다음과 같은 것들이 있습니다:
- BasicAuthenticationFilter: HTTP 기본 인증을 처리합니다.
- CsrfFilter: CSRF(Cross-Site Request Forgery) 보호를 담당합니다.
- CorsFilter: 교차 출처 리소스 공유(CORS) 규칙을 처리합니다.
필터 체인에 포함되는 필터들은 Spring Security의 기본 설정에 따라 달라지며, 필터가 체인에 어떻게 추가되는지에 대한 이해가 중요합니다. 각 필터는 순차적으로 요청을 처리하며, 이를 통해 보안 로직을 모듈화하고 관리할 수 있습니다.
필터 체인의 구성
필터 체인의 구성은 HttpSecurity 클래스에서 제공하는 설정을 통해 결정됩니다. 예를 들어, HTTP 기본 인증을 사용하려면 httpBasic() 메소드를 호출하면 BasicAuthenticationFilter가 필터 체인에 추가됩니다. 필터 체인의 길이는 애플리케이션의 보안 요구사항과 구성에 따라 달라질 수 있습니다.
- 필터의 위치는 순서 번호로 결정됩니다. 각 필터는 고유한 순서 번호를 가집니다.
- 새로운 필터는 기존 필터의 앞, 뒤 또는 원하는 위치에 추가할 수 있습니다. 이를 통해 필터 체인을 자유롭게 커스터마이징할 수 있습니다.
Spring Security는 FilterOrderRegistration 클래스를 통해 필터 순서와 관련된 세부 설정을 제공합니다. 이 클래스를 통해 필터 체인 내에서 각 필터의 위치를 정확하게 제어할 수 있습니다.
필터 예시
다음은 Spring Security에서 제공하는 몇 가지 주요 필터와 그 역할입니다:
- DisableEncoderUrlFilter: URL 인코딩을 비활성화하여, 세션 ID가 URL에 포함되지 않도록 방지합니다. 이는 보안 위험을 줄이고 세션 정보 유출을 방지하는 데 중요합니다.
- ForceEagerSessionCreationFilter: 요청이 들어오면 즉시 세션을 생성하여, 후속 요청에서 세션에 의존하는 보안 처리를 보장합니다.
- ChannelProcessingFilter: 요청이 특정 전송 채널(HTTP, HTTPS)을 통해 전달되도록 보장합니다. 예를 들어, 민감한 데이터가 오가는 페이지에서 HTTPS만 사용하도록 강제할 수 있습니다.
- WebAsyncManagerIntegrationFilter: 비동기 요청 처리와 보안 컨텍스트의 통합을 담당하여, 비동기 요청에서도 인증된 사용자의 보안 컨텍스트를 유지할 수 있습니다.
- SecurityContextHolderFilter: 보안 컨텍스트를 SecurityContextHolder에 설정하고 관리하는 필터로, 세션 기반 인증 및 다른 인증 메커니즘에서도 보안 상태를 일관되게 관리합니다.
- LogoutFilter: 로그아웃 요청을 처리하고, 세션 무효화 및 보안 컨텍스트 제거 등의 작업을 수행합니다. 또한 로그아웃 성공 이벤트를 발행할 수 있습니다.
필터 체인에서 여러 필터 순서 설정
필터 체인 내에서 동일한 순서 번호를 가진 필터들이 있을 경우, Spring Security는 이들이 호출되는 순서를 보장하지 않습니다. 이 경우 개발자는 필터의 순서를 명확히 설정해야 하며, 필터의 순서에 따라 보안 로직이 다르게 처리될 수 있습니다. 이러한 상황은 종종 혼란을 일으킬 수 있으므로, 필터 순서 설정을 정확히 이해하고 적용하는 것이 중요합니다.
결론
Spring Security의 필터와 필터 체인은 애플리케이션의 보안을 구현하는 핵심 요소입니다. 다양한 보안 기능을 처리하는 필터들을 정의된 순서대로 적용하여 HTTP 요청을 안전하게 처리할 수 있으며, 필요에 따라 필터 체인을 커스터마이즈하여 애플리케이션의 보안 요구사항을 충족시킬 수 있습니다.
5.2 기존 필터보다 앞서 필터 추가하기
이 섹션에서는 Spring Security 필터 체인에서 기존 필터보다 앞서 사용자 정의 HTTP 필터를 추가하는 방법에 대해 다룹니다. 이 방법을 통해 인증 필터 전에 요청을 검증하는 등의 로직을 추가할 수 있습니다. 실제적인 예제를 통해, 사용자 정의 필터를 구현하고 필터 체인에서 기존 필터보다 앞서 적용하는 방법을 배워봅니다.
시나리오
예를 들어, 애플리케이션에서 모든 요청에 Request-Id라는 헤더가 포함되어 있는지 확인하고 싶다고 가정해 봅시다. 이 헤더는 요청 추적용으로 필수적이며, 인증 절차가 실행되기 전에 해당 헤더가 존재하는지 먼저 확인하고 싶습니다. 만약 헤더가 없다면 인증을 진행하지 않고, 클라이언트에게 400 Bad Request 상태를 반환해야 합니다.
이를 해결하기 위해 두 단계로 진행할 수 있습니다:
- RequestValidationFilter 클래스를 구현하여 요청에 필요한 헤더가 있는지 확인하는 필터를 만듭니다.
- 필터 체인에 이 필터를 추가하여, 필터 체인 내에서 인증 필터 이전에 이 필터가 실행되도록 설정합니다.
1단계: 사용자 정의 필터 구현
우리는 RequestValidationFilter라는 사용자 정의 필터를 만들어 요청에 Request-Id 헤더가 포함되어 있는지 확인합니다. 헤더가 없으면 400 Bad Request 상태를 반환하고, 있으면 요청을 체인의 다음 필터로 전달합니다.
public class RequestValidationFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
throws IOException, ServletException {
var httpRequest = (HttpServletRequest) request;
var httpResponse = (HttpServletResponse) response;
String requestId = httpRequest.getHeader("Request-Id");
if (requestId == null || requestId.isBlank()) {
httpResponse.setStatus(HttpServletResponse.SC_BAD_REQUEST);
return; // Request-Id가 없으면 요청을 중단하고, 체인의 다음 필터로 전달되지 않음
}
filterChain.doFilter(request, response); // Request-Id가 있으면 다음 필터로 요청을 전달
}
}
2단계: 필터 체인에 사용자 정의 필터 추가
이제 RequestValidationFilter를 Spring Security의 필터 체인에 추가해야 합니다. 이를 위해 HttpSecurity 객체의 addFilterBefore() 메서드를 사용합니다. 이 메서드는 사용자 정의 필터를 지정된 기존 필터보다 앞서 실행되도록 추가할 수 있게 해줍니다. 여기서는 BasicAuthenticationFilter 이전에 사용자 정의 필터를 추가할 것입니다.
@Configuration
public class ProjectConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.addFilterBefore(
new RequestValidationFilter(), BasicAuthenticationFilter.class) // 인증 필터 전에 사용자 정의 필터 추가
.authorizeRequests(c -> c.anyRequest().permitAll());
return http.build();
}
}
결과
애플리케이션을 실행하고 테스트할 때, Request-Id 헤더 없이 요청을 보내면 HTTP 상태 코드 400 (Bad Request)을 받게 됩니다. 반대로 Request-Id 헤더를 포함한 요청을 보내면 HTTP 상태 코드 200 (OK)과 함께 정상적인 응답을 받을 수 있습니다.
이와 같은 방식으로 필터를 구성하면, 요청이 인증 전에 필요한 검증을 거치게 할 수 있습니다. 이를 통해 보다 정교한 보안 처리를 구현할 수 있습니다.
5.3 기존 필터 이후에 필터 추가하기
이 섹션에서는 Spring Security 필터 체인에서 기존 필터 이후에 사용자 정의 필터를 추가하는 방법에 대해 설명합니다. 이 방식은 특정 필터가 이미 실행된 후, 그 이후에 추가적인 로직을 실행하고자 할 때 유용합니다. 예를 들어, 인증 필터가 성공적으로 인증된 요청을 처리한 후, 다른 시스템에 알림을 보내거나 로깅을 할 수 있습니다.
시나리오
우리는 인증 필터 이후에 요청을 로깅하는 필터를 추가하려고 합니다. 예를 들어, 성공적인 인증이 이루어진 후에 요청 ID를 로깅하고, 추가적인 처리를 하도록 할 수 있습니다. 5.1절에서 다룬 요청 검증 필터와 유사한 방식으로, 요청 ID를 로그로 기록하는 기능을 구현할 수 있습니다.
1단계: 인증 이벤트 로깅 필터 구현
우리는 인증 필터 이후에 요청을 로깅하는 필터인 AuthenticationLoggingFilter를 작성할 것입니다. 이 필터는 인증이 성공적으로 이루어진 요청을 처리하며, HTTP 헤더에서 Request-Id를 추출하고 이를 로깅합니다.
public class AuthenticationLoggingFilter implements Filter {
private final Logger logger = Logger.getLogger(AuthenticationLoggingFilter.class.getName());
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
throws IOException, ServletException {
var httpRequest = (HttpServletRequest) request;
var requestId = httpRequest.getHeader("Request-Id"); // A
logger.info("Successfully authenticated request with id " + requestId); // B
filterChain.doFilter(request, response); // C
}
}
- A: Request-Id 헤더에서 요청 ID를 추출합니다.
- B: 추출한 요청 ID로 인증된 요청을 로깅합니다.
- C: 요청을 체인의 다음 필터로 전달합니다.
2단계: 필터 체인에 로깅 필터 추가
이제 AuthenticationLoggingFilter를 인증 필터인 BasicAuthenticationFilter 이후에 실행되도록 필터 체인에 추가해야 합니다. 이를 위해 HttpSecurity 객체의 addFilterAfter() 메서드를 사용합니다.
@Configuration
public class ProjectConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.addFilterBefore(
new RequestValidationFilter(),
BasicAuthenticationFilter.class)
.addFilterAfter( // A
new AuthenticationLoggingFilter(),
BasicAuthenticationFilter.class) // 인증 필터 후에 로깅 필터 추가
.authorizeRequests(c -> c.anyRequest().permitAll());
return http.build();
}
}
- A: AuthenticationLoggingFilter 인스턴스를 BasicAuthenticationFilter 뒤에 추가합니다.
결과
애플리케이션을 실행하고 엔드포인트를 호출하면, 성공적인 인증을 거친 요청에 대해 AuthenticationLoggingFilter가 실행되어 Request-Id를 로깅합니다. 이 로깅 정보는 콘솔에서 확인할 수 있습니다.
예를 들어, 인증이 성공적으로 이루어진 후, 다음과 같은 로그가 출력될 수 있습니다:
Successfully authenticated request with id abc123
이렇게 하면, 인증 후에 로깅을 하거나, 추가적인 처리 로직을 실행하는 필터를 쉽게 추가할 수 있습니다.
5.4 필터 체인의 다른 위치에 필터 추가하기
이 섹션에서는 Spring Security에서 이미 존재하는 필터 위치에 다른 필터를 추가하는 방법에 대해 설명합니다. 이 방식은 기존 인증 메커니즘을 대체하거나 변경하고자 할 때 유용합니다. 예를 들어, HTTP Basic 인증 방식 대신 다른 인증 방법을 사용하려는 경우입니다.
시나리오
우리는 세 가지 인증 시나리오를 다룹니다:
- 정적 헤더 값 기반 인증: 클라이언트는 항상 동일한 문자열을 HTTP 요청의 헤더에 전달하고, 서버는 이를 검증합니다.
- 대칭 키 서명 인증: 클라이언트와 서버가 공유하는 비밀 키로 요청을 서명하고, 서버가 서명을 검증합니다.
- 일회용 비밀번호 (OTP) 인증: 사용자가 OTP를 사용하여 인증을 진행합니다.
이 예제에서는 정적 키 기반 인증을 구현하여, 클라이언트가 HTTP 요청의 Authorization 헤더에 지정된 키 값을 포함시키면 서버에서 이를 검증하고 요청을 허용합니다.
1단계: StaticKeyAuthenticationFilter 구현
먼저, StaticKeyAuthenticationFilter라는 클래스를 정의하여, HTTP 요청의 Authorization 헤더에 있는 값과 정적 키를 비교합니다. 만약 값이 일치하면 요청을 필터 체인의 다음 단계로 전달하고, 일치하지 않으면 HTTP 401 상태 코드를 반환합니다.
@Component // A
public class StaticKeyAuthenticationFilter implements Filter { // B
@Value("${authorization.key}") // C
private String authorizationKey;
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
throws IOException, ServletException {
var httpRequest = (HttpServletRequest) request;
var httpResponse = (HttpServletResponse) response;
String authentication = httpRequest.getHeader("Authorization"); // D
if (authorizationKey.equals(authentication)) {
filterChain.doFilter(request, response);
} else {
httpResponse.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
}
}
}
- A: Spring 컨텍스트에 필터를 등록하여 인스턴스를 자동으로 주입받을 수 있도록 합니다.
- B: Filter 인터페이스를 구현하고, 인증 로직을 doFilter() 메서드에 작성합니다.
- C: @Value 어노테이션을 사용하여 application.properties 파일에서 정적 키 값을 읽어옵니다.
- D: 요청에서 Authorization 헤더 값을 가져와서 정적 키와 비교합니다.
2단계: 필터 체인에 필터 추가
이제 StaticKeyAuthenticationFilter를 기존 필터인 BasicAuthenticationFilter 위치에 추가해야 합니다. 이를 위해 HttpSecurity 객체의 addFilterAt() 메서드를 사용합니다. addFilterAt() 메서드는 특정 위치에 필터를 추가할 수 있게 해줍니다.
@Configuration
public class ProjectConfig {
private final StaticKeyAuthenticationFilter filter; // A
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.addFilterAt(filter, BasicAuthenticationFilter.class) // B
.authorizeRequests(c -> c.anyRequest().permitAll());
return http.build();
}
}
- A: 필터의 인스턴스를 Spring 컨텍스트에 주입합니다.
- B: addFilterAt() 메서드를 사용하여 BasicAuthenticationFilter 위치에 StaticKeyAuthenticationFilter를 추가합니다.
3단계: 애플리케이션 테스트
이제 애플리케이션을 테스트할 준비가 되었습니다. Authorization 헤더에 올바른 값이 포함된 요청은 성공적으로 처리되고, 그렇지 않은 요청은 HTTP 401 상태 코드를 반환해야 합니다.
curl -H "Authorization:SD9cICjl1e" http://localhost:8080/hello
이 요청은 서버에서 Authorization 헤더 값이 올바른 경우 "Hello!"라는 응답을 반환합니다.
응답 본문:
Hello!
반면, 올바르지 않은 헤더를 보낸 요청은 HTTP 401 Unauthorized 상태 코드와 함께 응답합니다.
curl -v http://localhost:8080/hello
응답 상태:
HTTP/1.1 401 Unauthorized
참고사항
- UserDetailsService 자동 구성 비활성화: 이 예제에서는 사용자 인증을 위한 UserDetailsService가 필요하지 않기 때문에 이를 비활성화할 수 있습니다. @SpringBootApplication 어노테이션에 exclude 속성을 추가하여 자동 구성을 비활성화할 수 있습니다.
@SpringBootApplication(exclude = {UserDetailsServiceAutoConfiguration.class})
결론
이렇게 Spring Security에서는 필터 체인의 특정 위치에 필터를 추가하여 기존의 인증 방식 또는 다른 보안 로직을 대체할 수 있습니다. addFilterAt() 메서드를 사용하면, 특정 필터 위치에서 원하는 인증 방식을 구현할 수 있습니다.
5.5 Spring Security에서 제공하는 필터 구현
이 섹션에서는 Spring Security에서 제공하는 다양한 필터 구현 클래스들에 대해 설명합니다. Spring Security는 Filter 인터페이스를 직접 구현한 몇 가지 추상 클래스를 제공하여, 이를 확장하여 필터를 정의할 수 있도록 합니다. 이러한 클래스들은 특정 기능을 간편하게 구현할 수 있도록 돕습니다.
1. GenericFilterBean 클래스
GenericFilterBean은 Filter 인터페이스를 구현한 기본 클래스입니다. 이 클래스를 확장하면 웹 애플리케이션의 web.xml에서 설정한 초기화 파라미터를 사용할 수 있게 됩니다. 이 클래스는 더 많은 유연성을 제공하지만, 꼭 필요한 기능이 아닌 경우에는 과도한 기능을 제공할 수 있습니다.
2. OncePerRequestFilter 클래스
OncePerRequestFilter는 필터가 요청당 한 번만 실행되도록 보장하는 특성을 가진 클래스입니다. doFilter() 메서드를 오버라이드할 때, 필터가 여러 번 호출되는 것을 방지하고 요청당 한 번만 필터가 작동하도록 할 수 있습니다. 이 클래스는 주로 로깅이나 요청당 한 번만 수행해야 하는 작업에 유용합니다.
예를 들어, 섹션 5.3에서 구현한 로깅 기능은 OncePerRequestFilter를 사용하여 한 번만 로그를 기록하도록 할 수 있습니다. 예제 코드에서는 doFilterInternal() 메서드를 오버라이드하여 필터의 내부 동작을 정의합니다.
OncePerRequestFilter 클래스 예제 (Listing 5.9)
public class AuthenticationLoggingFilter extends OncePerRequestFilter {
private final Logger logger = Logger.getLogger(AuthenticationLoggingFilter.class.getName());
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
String requestId = request.getHeader("Request-Id");
logger.info("Successfully authenticated request with id " + requestId);
filterChain.doFilter(request, response);
}
}
- doFilterInternal(): 이 메서드는 doFilter()를 대체하며 요청을 필터링하는 핵심 로직을 처리합니다.
- HTTP 요청: OncePerRequestFilter는 HttpServletRequest와 HttpServletResponse를 제공하여 필터가 HTTP 요청에 직접 접근할 수 있도록 합니다.
- 로깅: Request-Id 헤더 값을 읽어 로깅하는 예시입니다.
3. OncePerRequestFilter 사용 시의 장점
- HTTP 요청 지원: OncePerRequestFilter는 HTTP 요청만 처리하기 때문에 HttpServletRequest와 HttpServletResponse를 바로 사용할 수 있습니다.
- 특정 요청에만 적용: shouldNotFilter(HttpServletRequest) 메서드를 오버라이드하여 특정 요청에는 필터를 적용하지 않을 수 있습니다.
- 비동기 및 오류 디스패치 처리: 비동기 요청이나 오류 디스패치 요청에 필터를 적용하지 않도록 기본 설정되어 있으며, 필요시 shouldNotFilterAsyncDispatch() 및 shouldNotFilterErrorDispatch() 메서드를 오버라이드하여 동작을 변경할 수 있습니다.
4. 필터 구현 시 주의사항
- 필터 체인에 추가 시 위치: Spring Security에서는 필터 체인의 위치에 맞춰 필터를 추가할 수 있습니다. 이때 OncePerRequestFilter를 사용할 경우, 요청당 한 번만 실행되도록 보장하므로, 필터 체인 내 중복 호출을 피할 수 있습니다.
- 적용 여부 결정: OncePerRequestFilter는 기본적으로 모든 요청에 적용됩니다. 그러나 shouldNotFilter() 메서드를 오버라이드하여 필터가 적용되지 않도록 할 수 있습니다.
5.6 요약
- 필터 체인: 웹 애플리케이션에서 HTTP 요청을 가로채는 필터 체인은 중요한 보안 아키텍처의 첫 번째 레이어입니다. Spring Security는 이를 사용자 정의할 수 있도록 유연하게 제공합니다.
- 필터 순서: 필터는 기존 필터 전후에 추가하거나 특정 위치에 추가할 수 있습니다. 그러나 여러 필터를 동일한 위치에 추가하면 필터가 실행되는 순서를 명확히 정의하는 것이 중요합니다.
- 사용자 정의: 필터 체인을 사용자 정의함으로써 인증 및 권한 부여를 애플리케이션의 요구 사항에 맞게 최적화할 수 있습니다.
'Spring Security in Action' 카테고리의 다른 글
8장 Configuring endpoint-level authorization: Applying restrictions (0) | 2024.12.01 |
---|---|
7장 Configuring endpoint-level authorization: Restricting access (0) | 2024.12.01 |
4장 비밀번호 인코더 구현 및 작업 (0) | 2024.12.01 |
3장 Managing users (0) | 2024.12.01 |
2장 Hello Spring Security (0) | 2024.12.01 |