좋아, 지금부터 @WebFilter 애노테이션 방식과
Spring Security의 FilterChain 구조를 각각 깔끔하고 쉽게 정리해줄게.
@WebFilter 애노테이션 방식 (Servlet 3.0+)XML 설정 없이, 자바 코드에서 필터 등록 가능하게 해주는 애노테이션 방식
→web.xml대신 사용하는 방법
import jakarta.servlet.annotation.WebFilter;
import jakarta.servlet.*;
import java.io.IOException;
@WebFilter(
filterName = "LoggingFilter", // 생략 가능
urlPatterns = { "/*" } // 필터 적용 URL
)
public class LoggingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) {
System.out.println("필터 초기화");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("요청 전 로그");
chain.doFilter(request, response); // 다음 필터 또는 서블릿으로 전달
System.out.println("응답 후 로그");
}
@Override
public void destroy() {
System.out.println("필터 종료");
}
}
| 속성명 | 설명 |
|---|---|
filterName | 필터 이름 (생략 가능) |
urlPatterns | 필터를 적용할 URL 패턴 (/sample, /*) |
servletNames | 특정 서블릿 이름에만 적용하고 싶을 때 사용 |
Spring Security는 다양한 보안 기능(인증, 권한 검사 등)을 제공하며, 그 핵심은 Filter 기반 처리야.
웹 요청이 DispatcherServlet에 도달하기 전에 FilterChainProxy가 먼저 요청을 처리해.
Client
↓
[Spring Security Filter Chain]
↓
DispatcherServlet
↓
Controller → Service → Repository
Spring Security는 다음과 같은 수십 개의 필터로 구성된 FilterChain을 가짐:
| 순서 | 필터 이름 | 역할 |
|---|---|---|
| 1 | SecurityContextPersistenceFilter | 인증 정보 유지/복원 |
| 2 | UsernamePasswordAuthenticationFilter | 로그인 처리 |
| 3 | BasicAuthenticationFilter | HTTP Basic 인증 처리 |
| 4 | ExceptionTranslationFilter | 예외 핸들링 및 리다이렉트 |
| 5 | FilterSecurityInterceptor | 권한 확인 (접근제어) |
💡 이 필터들은 FilterChainProxy 안에 묶여서 작동함.
Spring Security는 DelegatingFilterProxy를 통해 Spring Bean으로 관리되는 FilterChainProxy에 요청을 위임함.
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().permitAll()
)
.formLogin(); // 로그인 폼 활성화
return http.build();
}
}
| 항목 | 설명 |
|---|---|
@WebFilter | Java EE(Servlet) 표준 방식. 공통 기능 필터 구현 |
Spring Security FilterChain | 보안 기능 전문화된 필터 체인. 인증/인가 전담 |
필요하면 Spring Security 흐름도,
JWT나 OAuth2 적용 흐름,
Spring 필터 vs 인터셉터 비교표도 정리해줄 수 있어.
어떤 쪽으로 더 이어서 보고 싶어? 😎