Backend/Spring Security

[Spring security] Custom FilterChain

sliver__ 2025. 1. 31. 21:36
728x90

Spring security에 내가 원하는 filter는 어떻게 추가할까?

 

filter 동작을 구현하고 SecurityFilterChain에 추가하면 된다.

 

httpSecurity의 .addFilterAt, .addFilterBefore, .addFileterAfter가 있다.

addFilterAt(Filter filter, Class<? extends Filter> AtFilter) 첫 번째 파라미터는 추가하려는 필터 대상
두 번째 파라미터는 함수 이름을 따라 해당 필터가 "언제" 실행될 지 기준이 되는 필터

addAtFilter 함수의 경우, 동시에 수행되는 필터의 순서는 랜덤이다.
그러므로 순서에 종속성이 없는 필터인 경우 사용해야 한다.
addFilterBefore(Filter filter, Class<? extends Filter> beforeFilter)
addFileterAfter(Filter filter, Class<? extends Filter> AfterFilter)

 

Custom 필터는 아래의 Filter interface를 상속받아 doFilter를 구현하면 된다.

HttpRequest를 통해 전달받은 client request에 필요한 값을 사용하여 어떤 HttpResponse를 return 할 지 설정하면 된다.

public interface Filter {
    default void init(FilterConfig filterConfig) throws ServletException {
    }

    void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3) throws IOException, ServletException;

    default void destroy() {
    }
}

 

아래와 같이 @Configuration으로 설정한 SecurityFilterChain의 HttpSecurity에 추가하면 된다.

.addFilterBefore(new RequestValidationBeforeFilter(), BasicAuthenticationFilter.class)
728x90