@WebFilter

moon.kick·2025년 4월 17일

좋아, 지금부터 @WebFilter 애노테이션 방식
Spring Security의 FilterChain 구조를 각각 깔끔하고 쉽게 정리해줄게.


✅ 1. @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특정 서블릿 이름에만 적용하고 싶을 때 사용

✅ 2. Spring Security FilterChain 구조

Spring Security는 다양한 보안 기능(인증, 권한 검사 등)을 제공하며, 그 핵심은 Filter 기반 처리야.
웹 요청이 DispatcherServlet에 도달하기 전에 FilterChainProxy가 먼저 요청을 처리해.


🔸 구조 흐름 (요청 흐름)

Client
  ↓
[Spring Security Filter Chain]
  ↓
DispatcherServlet
  ↓
Controller → Service → Repository

🔸 FilterChain 구성 요소 예시

Spring Security는 다음과 같은 수십 개의 필터로 구성된 FilterChain을 가짐:

순서필터 이름역할
1SecurityContextPersistenceFilter인증 정보 유지/복원
2UsernamePasswordAuthenticationFilter로그인 처리
3BasicAuthenticationFilterHTTP Basic 인증 처리
4ExceptionTranslationFilter예외 핸들링 및 리다이렉트
5FilterSecurityInterceptor권한 확인 (접근제어)

💡 이 필터들은 FilterChainProxy 안에 묶여서 작동함.
Spring Security는 DelegatingFilterProxy를 통해 Spring Bean으로 관리되는 FilterChainProxy에 요청을 위임함.


🔸 Spring Boot 기준 기본 설정 흐름

@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();
    }
}

✅ 비교 요약

항목설명
@WebFilterJava EE(Servlet) 표준 방식. 공통 기능 필터 구현
Spring Security FilterChain보안 기능 전문화된 필터 체인. 인증/인가 전담

필요하면 Spring Security 흐름도,
JWT나 OAuth2 적용 흐름,
Spring 필터 vs 인터셉터 비교표도 정리해줄 수 있어.

어떤 쪽으로 더 이어서 보고 싶어? 😎

profile
@mgkick

0개의 댓글