728x90
Spring Filter란?
javax.servlet.Filter는 Java Servlet API의 일부로, 요청과 응답을 거른뒤 정제하는 역할
특징
- DispatcherServlet에 요청이 전달되기 전 / 후에 url 패턴에 맞는 모든 요청에 대해 부가 작업을 처리할 수 있는 기능 제공
- Request, Response 조작 가능 (필터 체이닝에서 request, response를 넘겨줄 수 있어서)
- FilterChain(필터 체인)을 통해 여러 필터가 연쇄적으로 동작 가능
- 웹 컨테이너(서블릿 컨테이너)에서 동작
언제 사용되나요?
주로 요청에 대한 인증, 권한 체크 등에 사용됨
들어온 요청이 DispatcherServlet에 전달되기 전에 헤더를 검사해 인증 토큰이 있는지 없는지, 올바른지 올바르지 않은지 등을 검사
구현 방법
- @Configuration + FilterRegistrationBean
- @Component
- @WebFilter + @ServletComponentScan
- @WebFilter + @Component
Filter 인터페이스 메서드
public interface Filter {
public default void init(FilterConfig filterConfig) throws ServletException {}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException;
public default void destroy() {}
}
- init() : 필터 객체를 초기화하고 서비스에 추가하기 위한 메소드, 웹 컨테이너가 1회 init 메소드를 호출하여 필터 객체를 초기화하면 이후의 요청들은 doFilter를 통해 처리
- doFilter() : Request, Response가 필터를 거칠 때 수행되는 메소드
더보기
url-pattern에 맞는 모든 HTTP 요청이 디스패처 서블릿으로 전달되기 전에 웹 컨테이너에 의해 실행되는 메소드이다.
doFilter의 파라미터로는 FilterChain이 있는데, FilterChain의 doFilter 통해 다음 대상으로 요청을 전달하게 된다. chain.doFilter() 전/후에 우리가 필요한 처리 과정을 넣어줌으로써 원하는 처리를 진행할 수 있다.
- destroy() : 필터 객체를 서비스에서 제거하고 사용하는 자원을 반환하기 위한 메소드, 웹 컨테이너에 의해 1번 호출
사용 경험
다이어리 프로젝트에서 SpringSecurity와 Jwt를 이용한 인증을 구현할 때, Filter 사용
'CS' 카테고리의 다른 글
[CS] Spring PSA (1) | 2024.05.01 |
---|---|
[CS] Spring Interceptor (0) | 2024.04.30 |
[CS] Spring DI란? (0) | 2024.04.30 |
[CS] Spring에서 Bean 등록하는 방법 (0) | 2024.04.29 |
[CS 스터디] Spring (0) | 2024.04.29 |