GenericFilterBean
- 개요:
- GenericFilterBean은 Spring 프레임워크 내에서 사용 가능한 추상 클래스입니다.
- 필터 인터페이스의 간단한 기본 구현을 제공하며, 모든 유형의 필터에 대해 편리하게 사용할 수 있습니다.
- 이점:
- web.xml이나 배포 설명자 내에서 구성한 설정 매개변수, 초기 매개변수 및 서블릿 컨텍스트 매개변수에 쉽게 접근할 수 있습니다.
- 환경 세부 정보, 필터 구성 세부 정보, 서블릿 컨텍스트 세부 정보 및 초기 매개변수를 제공하는 여러 메소드를 제공합니다.
- 사용 시기:
- 커스텀 필터 내에서 구성 매개변수, 초기 매개변수 또는 서블릿 컨텍스트에 접근해야 하는 경우.
OncePerRequestFilter
- 개요:
- OncePerRequestFilter는 요청 당 한 번만 실행되도록 보장하는 필터를 작성할 때 사용하는 추상 클래스입니다.
- 서블릿 컨테이너가 필터를 여러 번 호출할 수 있는 상황을 방지합니다.
- 이점:
- 요청 당 한 번만 실행되도록 보장합니다.
- 이미 실행된 필터는 다시 실행되지 않습니다.
- 사용 시기:
- 필터가 반드시 요청 당 한 번만 실행되어야 하는 경우.
- 주요 메소드:
- doFilterInternal: 비즈니스 로직을 작성하는 메소드입니다. doFilter 메소드 대신 이 메소드를 오버라이드하여 사용합니다.
- shouldNotFilter: 특정 조건에서 필터를 실행하지 않도록 설정할 수 있습니다.
- 예제 코드:
- BasicAuthenticationFilter는 OncePerRequestFilter를 확장하여 구현됩니다.
GenericFilterBean
package com.example.filters;
import org.springframework.web.filter.GenericFilterBean;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;
public class MyGenericFilterBean extends GenericFilterBean {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// 필터 로직
chain.doFilter(request, response);
}
}
OncePerRequestFilter
package com.example.filters;
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class MyOncePerRequestFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
// 비즈니스 로직
filterChain.doFilter(request, response);
}
@Override
protected boolean shouldNotFilter(HttpServletRequest request) throws ServletException {
// 특정 조건에서 필터 실행을 건너뛰도록 설정
return super.shouldNotFilter(request);
}
}