본문으로 바로가기

[Spring] Filter & Interceptor

category Framework/Spring 2021. 12. 22. 14:02

Filter VS interceptor

Spring Life Cycle

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; 
	} 
}