๐Spring Filter์ Interceptor
Filter
- ์คํ๋ง์ AOP์ฒ๋ผ ์๋ธ๋ฆฟ์ ๊ณตํต ๊ด์ฌ์ฌ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๋ ์์๊ฐ Filter์ด๋ค.
Filter์ ํ๋ฆ(Filter Chain)
HTTP REQUEST -> WAS -> FILTER1 โ> FILTER2 -> โฆ -> SERVLET -> CONTROLLER
Filter ๊ตฌํ
public class LogFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
log.info("log filter init");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest)request;
String requestUri = httpRequest.getRequestURI();
String uuid = UUID.randomUUID().toString();
try {
log.info("REQUEST {} {} ", uuid, requestUri);
// ๋งค์ฐ ์ค์! ์ด ์ฝ๋๊ฐ ์์ด์ผ ๋ค์ ์ฒด์ธ์ผ๋ก ๋์ด๊ฐ๋ค.
chain.doFilter(request, response);
} catch(Exception e) {
throw e;
} finally {
log.info("RESPONSE {} {}", uuid, requestUri);
}
}
@Override
public default void destroy() {
log.info("log filter destroy");
}
}
Filter์ ๋ฑ๋ก
- Configuration์์
FilterRegistrationBean
์ ์ด์ฉํ์ฌ ๋ฑ๋กํ๋ค. - ์ฐ์ ์์, ์ ์ฉํ url ํจํด ๋ฑ์ ๋ฑ๋กํ ์ ์๋ค.
@Configuration
public class WebConfig {
@Bean
public FilterRegistrationBean logFilter() {
FilterRegistrationBean<Filter> filterRegistrationBean = new FilterRegistrationBean<>();
filterRegistrationBean.setFilter(new LogFilter());
filterRegistrationBean.setOrder(1);
filterRegistrationBean.addUrlPattern("/login");
return filterRegistrationBean;
}
}
Interceptor
- Filter๋ ์๋ธ๋ฆฟ์ด ์ ๊ณตํ๋ ๊ธฐ์ ์ด๋ฉฐ, Interceptor๋ ์คํ๋ง์ด ์ ๊ณตํ๋ ๊ธฐ์ ์ด๋ค. ๋ ๋ฐ์ด๋ ๋ถ๋ถ์ด ๋ง๋ค.
Interceptor์ ํ๋ฆ
- ์คํ๋ง์ด ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ด๋ฏ๋ก Dispatcher servlet ์ดํ์ ์ ์ฉ๋๋ค.
HTTP REQUEST -> WAS -> FILTER1 โ> FILTER2 -> โฆ -> SERVLET -> INTERCEPTOR1 -> INTERCEPTOR2 -> โฆ -> CONTROLLER
Interceptor ๊ตฌํ
public class LogInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// ์ธํฐ์
ํฐ๊ฐ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ
return true; // false๋ฅผ ๋ฆฌํดํ๋ฉด ๋ ์ด์ ์งํํ์ง ์๋๋ค.
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// ์์ธ ๋ฐ์์ ํธ์ถ๋์ง ์๋๋ค.
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// ์์ธ๊ฐ ๋ฐ์ํด๋ ํธ์ถ๋๋ค.
}
}
Interceptor ๋ฑ๋ก
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LogInterceptor())
.order(1)
.addPathPatterns("/login")
.excludePathPatterns("/css");
}
}