Filter VS interceptor
Filter는 Dispatcher Sevlet 의 앞단에서 처리한다.
Interceptor 는 Dispatcher Servlet 의 뒷단에서 처리된다.
Filter
@Slf4j
@Component
public class GlobalFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequestWrapper requestWrapper = new HttpServletRequestWrapper((HttpServletRequest) request);
HttpServletResponseWrapper responseWrapper = new HttpServletResponseWrapper((HttpServletResponse) response);
// log.info("Request Method : {}", requestWrapper.getMethod());
// log.info("Request URI : {}", requestWrapper.getRequestURI());
// log.info("Request URL : {}", requestWrapper.getRequestURL());
// log.info("Request Session : {}", requestWrapper.getSession());
// log.info("Request Remote Host : {}", requestWrapper.getRemoteHost());
// log.info("Request Remote User : {}", requestWrapper.getRemoteUser());
// log.info("Request Auth Type : {}", requestWrapper.getAuthType());
chain.doFilter(request, response);
log.info("{} {} {}",
requestWrapper.getMethod(),
requestWrapper.getRequestURI(),
HttpStatus.valueOf(responseWrapper.getStatus())
);
}
}
@Component 어노테이션을 사용하게 될 시 적용 범위는 서버를 통해 요청되는 모든 URI가 된다.
특정 URI 에 적용하고자 할 시 별도의 @Configuration 을 통해 @Bean 으로 등록해야 한다.
@Slf4j
//@Component 어노테이션 제거
public class GlobalFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequestWrapper requestWrapper = new HttpServletRequestWrapper((HttpServletRequest) request);
HttpServletResponseWrapper responseWrapper = new HttpServletResponseWrapper((HttpServletResponse) response);
// log.info("Request Method : {}", requestWrapper.getMethod());
// log.info("Request URI : {}", requestWrapper.getRequestURI());
// log.info("Request URL : {}", requestWrapper.getRequestURL());
// log.info("Request Session : {}", requestWrapper.getSession());
// log.info("Request Remote Host : {}", requestWrapper.getRemoteHost());
// log.info("Request Remote User : {}", requestWrapper.getRemoteUser());
// log.info("Request Auth Type : {}", requestWrapper.getAuthType());
chain.doFilter(request, response);
log.info("{} {} {}",
requestWrapper.getMethod(),
requestWrapper.getRequestURI(),
HttpStatus.valueOf(responseWrapper.getStatus())
);
}
}
@Configuration
public class FilterConfiguration implements WebMvcConfigurer {
@Bean public FilterRegistrationBean<GlobalFilter> globalFilterRegistrationBean() {
FilterRegistrationBean<UriFilter> registrationBean = new FilterRegistrationBean<>();
registrationBean.setFilter(new UriFilter());
registrationBean.addUrlPatterns("/users");
return registrationBean;
}
}
'Framework > Spring' 카테고리의 다른 글
[Spring] Open API 3 (with Swagger3) (0) | 2022.01.11 |
---|---|
[Spring] Swagger 3 (0) | 2022.01.11 |
[Spring] MyBatis Log 설정하기 (0) | 2021.12.16 |
[Spring] Get Request 의 파라미터를 객체로 받을 때의 Case Convert (0) | 2021.12.15 |
[Spring] MyBatis 연동 (0) | 2021.12.06 |