[ Filter ]
Filter 란
- 보안, 로깅, 인코딩, 인증인가를 처리할 때 사용된다
- servelt 전에 filter를 거쳐서 전/후처리를 한다.
ex) 일정을 요청할 때 - 올바른 사용자인지 체크하는 등 일정 조회 전에 필요한 기능들을 수행함
Filter Interface
1. init (초기화) : 처음 구동될 때 필터를 등록해준다
2. dofilter : 실제 필터 기능 로직
- 요청, 응답, 필터 체인을 호출할 수 있다
- filterchain 으로 다음 필터를 호출한다
3. destory : 소멸될 때 필터를 제거한다
Filter Chain
: 연쇄적으로 흘러간다
- dofilter에서 filter chain 값을 넘겨서 다음 chain으로 넘긴다
Spring Filter
spring filter는 DelegatingFilterProxy, FilterChainProxy를 사용한다.
Filter 등록 방법
1. @Configuration
: filter 관련된 Bean을 모아 관리하는 방법
- 설정을 위한 별개의 파일이 필요하다.
- setOrder( ) 를 통해 순서를 정할 수 있다.
- addUrlPatterns( ) 를 통해 베이스 URL 및 Whitelist를 설정할 수 있다.
@Configuration
public class FilterConfiguration {
/**
* 로그 관련 필터 추가.
*
* @return
*/
@Bean
public FilterRegistrationBean loggingFilter() {
FilterRegistrationBean<Filter> filterRegistrationBean = new FilterRegistrationBean<>();
filterRegistrationBean.setFilter(new LoggingFilter());
filterRegistrationBean.setOrder(1);
filterRegistrationBean.addUrlPatterns("/*");
return filterRegistrationBean;
}
}
2. @Component
- 설정을 위한 별개의 파일이 필요하지 않다.
- @Order 을 이용해 순서를 설정할 수 있다.
- 기본 URL Pattern이 /* 이며 설정할 수 없다.
@Slf4j
@Component // 추가된 두 가지
@Order(1) // 추가된 두 가지
public class LoggingFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain filterChain) throws IOException, ServletException {
// 전처리
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
String url = httpServletRequest.getRequestURI();
log.info(url);
filterChain.doFilter(servletRequest, servletResponse); // 다음 Filter 로 이동
}
}
3. @WebFilter + @ServletComponentScan
- 설정을 위한 별개의 파일이 필요하지 않다. (단, 애플리케이션 실행되는 메인 객체 위에 @ServletComponentScan을 사용해야 한다.)
- @Order 을 이용해 순서를 설정할 수 없다.
- @WebFilter의 value나 urlPatterns 파라미터를 통해 whitelist방식으로 베이스 URL을 설정할 수 있다.
@Slf4j
@WebFilter
public class LoggingFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain filterChain) throws IOException, ServletException {
// 전처리
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
String url = httpServletRequest.getRequestURI();
log.info(url);
filterChain.doFilter(servletRequest, servletResponse); // 다음 Filter 로 이동
}
}
@ServletComponentScan
@SpringBootApplication
public class FilterPatternApplication {
/**
* main.
*
* @param args argument.
*/
public static void main(String[] args) {
SpringApplication.run(FilterPatternApplication.class, args);
}
}
4. @WebFilter + @Component
- 2, 3번째 방법을 모두 사용하는 방법이다.
- 설정을 위한 별개의 파일이 필요하지 않다.
- @Order을 이용해 순서를 설정할 수 있다.
- @WebFilter의 value나 urlPatterns 파라미터를 이용해 베이스 URL이나 whitelist 방식으로 저장할 수 있다.
@Slf4j
@WebFilter
@Component
@Order(1)
public class LoggingFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain filterChain) throws IOException, ServletException {
// 전처리
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
String url = httpServletRequest.getRequestURI();
log.info(url);
filterChain.doFilter(servletRequest, servletResponse); // 다음 Filter 로 이동
}
}
'스파르타 내배캠' 카테고리의 다른 글
[TIL] #32. Spring Security (0) | 2024.06.05 |
---|---|
[TIL] #31. @Annotation (0) | 2024.06.04 |
[TIL] #29. JWT (0) | 2024.06.03 |
[TIL] #28. 인증/인가 (0) | 2024.05.30 |
[TIL] #27. JWT Util (0) | 2024.05.30 |