반응형
SpringBoot에서 쉽고 빠르게 Filter를 적용하는 방법을 알아보겠습니다.
FIlter는 서블릿이 지원하는 수문장이다.
필터 흐름
HTTP 요청 -> WAS -> 필터 -> 서블릿(Spring에서는 dispatcherservlet) -> 컨트롤러
필터 특징
1. 특정 URL 패턴에 적용할 수 있다.(/* 모든 요청 적용)
2. 필터 체인을 이용해서 필터를 자유롭게 추가할 수 있다.
소스 코드
TestFilter.java
- Spring에서 Filter는 Filter interface를 구현하면 사용할 수 있다.
- Filter interface를 구현하게 되면 init, doFilter, destory 3가지 메소드를 Override 하게 된다.(doFilter 메소드는 반드시 구현되어야 한다.)
package com.bumblebee.dailyspecial.domain.filter;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
@Slf4j
public class TestFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
log.info("TestFilter init");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
log.info("TestFilter doFilter");
HttpServletRequest httpRequest = (HttpServletRequest) request;
log.info(httpRequest.getRequestURI());
chain.doFilter(request, response);
// 이 부분이 가장 중요하다.
//다음 필터가 있으면 필터를 호출하고, 필터가 없으면 서블릿을 호출한다.
//만약 이 로직을 호출하지 않으면 다음 단계로 진행되지 않는다.
}
@Override
public void destroy() {
log.info("TestFilter init");
}
}
init(): 필터 초기화 메서드, 서블릿 컨테이너가 생성될 때 호출된다.
doFilter(): HTTP 요청이 올 때 마다 해당 메서드가 호출된다. 필터의 로직을 구현하면 된다.
destroy(): 필터 종료 메서드, 서블릿 컨테이너가 종료될 때 호출된다.
위에서 작성한 Filter를 등록해준다.
- WebMvcConfigurer 구현해서 FilterRegistrationBean으로 필터를 등록해준다.
package com.bumblebee.dailyspecial.config;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import javax.servlet.Filter;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Bean
public FilterRegistrationBean TestFilter() {
// SpringBoot 에서는 FilterRegistrationBean을 이용해서 필터 설정(was 올릴 때 서블릿 컨테이너 올릴 때 알아서 등록을 해준다.)
FilterRegistrationBean<Filter> filterRegistrationBean = new FilterRegistrationBean<>();
filterRegistrationBean.setFilter(new TestFilter()); // 등록할 필터
filterRegistrationBean.setOrder(1); // 필터 순서
filterRegistrationBean.addUrlPatterns("/*"); // 필터 적용할 url 패턴
return filterRegistrationBean;
}
}
TestFilter 출력 화면
728x90
반응형
'Spring' 카테고리의 다른 글
토이 프로젝트 _ STEP 03(Web Application 개발) (0) | 2022.08.15 |
---|---|
[SpringBoot] Interceptor 적용하기 (0) | 2022.06.23 |
토이 프로젝트 _ STEP 02(AWS S3) (0) | 2022.06.12 |
토이 프로젝트 _ STEP 02(AWS RDS) (0) | 2022.06.11 |
토이 프로젝트 _ STEP 01(NCP Server) (0) | 2022.06.06 |