Filter
in Spring on Spring Boot
๐ Filter, Interceptor
๋ก๊ทธ์ธ์ ํ์ง ์์ ์ฌ์ฉ์๊ฐ ๋ฌผ๊ฑด์ ์ฃผ๋ฌธํ๋ ์ผ์ ์์ด์ผ ํ๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ก๊ทธ์ธ ํ์ง ์์ ํด๋ผ์ด์ธํธ๋ ๋ค์ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ์ด๋์ํค๋ ๋ฑ
์ ์ ํ ์กฐ์น๋ฅผ ์ทจํด์ฃผ์ด์ผํ๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ฐ ์กฐ์น๋ฅผ ๋ชจ๋ ์์ฒญ์ ์ฝ๋ฉํ๋ค๋ฉด ๋งค์ฐ
์์ฐ์ ์ด์ง ์๋ค. ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ Filter์ Interceptor๋ฅผ ์ฌ์ฉํ๋ฉด๋๋ค.
Filter๋ Servlet์์ ์ ๊ณตํด์ฃผ๋ ์ธํฐํ์ด์ค์ด๊ณ ,
Interceptore๋ ์คํ๋ง์์ ์์ฒด์ ์ผ๋ก ์ ๊ณตํ๋ ์ธํฐํค์ด์ค ์ด๋ค.
Servlet Filter
1. ํํฐ์ ํ๋ฆ
HTTP ์์ฒญ โ WAS โ ํํฐ โ (Dispatch)์๋ธ๋ฆฟ โ ์ปจํธ๋กค๋ฌ
ํํฐ๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ํํฐ๊ฐ ๋จผ์ ํธ์ถ๋ ํ, ์๋ธ๋ฆฟ์ด ํธ์ถ๋๋ค.
๊ทธ๋ฆฌ๊ณ ํํฐ์๋ ํน์ URL์ ์ ์ฉํ ์ ์๋ค.
2. ํํฐ์ ์ ํ
HTTP ์์ฒญ โ WAS โ ํํฐ (์ ํฉํ์ง ์์ ์์ฒญ์ผ ๊ฒฝ์ฐ ์ฌ๊ธฐ์ ์ค๋จ)
๋ง์ฝ ํํฐ์์ ์์ฒญ์ ์ ํฉํ์ง ์๋ค๊ณ ํ๋จํ๊ฒ ๋ ๊ฒฝ์ฐ์ ํ๋ฆ์ ์์ ๊ฐ๋ค.
์ค๊ฐ์ ์ข ๋ฃ ๋๊ธฐ ๋๋ฌธ์ ๋ก๊ทผ์ธ ํ์ธ ์ฌ๋ถ๋ฅผ ๋ณด๊ธฐ์ ์ข๋ค.
3. ํํฐ ์ฒด์ธ
HTTP ์์ฒญ โ WAS โ ํํฐ1 โ ํํฐ2 โ ํํฐ3 โ (Dispatch)์๋ธ๋ฆฟ โ ์ปจํธ๋กค๋ฌ
ํํฐ๋ ํ ๊ฐ ์ด์ ์ ์ฉํ ์ ์๋ค. ๋์ ์ ํํฐ๋ฅผ WebConfig์ ๋ฑ๋กํ ๋
๊ทธ ์์๋ setOrder()
๋ก ์ง์ ํด ์ฃผ์ด์ผํ๋ค.
4. Filter Interface
public interface Filter {
public default void init(FilterConfig filterConfig) throws ServletException {}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException;
public default void destroy() {}
}
ํํฐ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ๋ฑ๋กํ๋ฉด ์๋ธ๋ฆฟ ์ปจํ ์ด๋๊ฐ ํํฐ๋ฅผ ์ฑ๊ธํค ๊ฐ์ฒด๋ก ์์ฑํ๊ณ , ๊ด๋ฆฌํ๋ค.
init()
๊ณผ destory()
๋ default ๋ฉ์๋์ด๊ธฐ ๋๋ฌธ์ ๊ผญ override ํ์ง ์์๋ ๋๋ค.
doFilter()
๊ฐ ๊ฐ์ฅ ์ค์ํ๋, ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ์ฌ ๋๋ง๋ค ํด๋น ๋ฉ์๋๊ฐ ์คํ๋๋ค.
๋ฐ๋ผ์ ์ด ๋ฉ์๋์ ๋น์ง๋์ค ๋ก์ง์ ์์ฑํ๋ฉด ๋๋ค.
์ถ๊ฐ์ ์ผ๋ก doFilter()
๋ฅผ ์์ฑํ ๋ ๋ง์ง๋ง์ ๊ผญ!!! chain.doFilter(request, response);๋ฅผ
์์ฑํด์ผ ํ๋ค.
๋ง์ฝ ์์ฑํ์ง ์์ ๊ฒฝ์ฐ ๋ ์ด์ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ค๋ก ๋์ด๊ฐ์ง ์๊ณ ๋๋๋ฒ๋ฆฐ๋ค.
5. Filter ์ ์ฉ
โ ํํฐ interface๋ฅผ ๊ตฌํํ๋ค.
public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) request;
HttpServletResponse response = (HttpServletResponse) response;
// ์ค์!!!
chain.doFilter(request,resoponse);
}
}
โ ์์ฑํ ํํฐ(MyFilter)๋ฅผ Bean์ ๋ฑ๋กํ๋ค.
@Configuration
public class WebConfig {
@Bean
public FilterRegistrationBean<Filter> myFilter() {
FilterRegistrationBean<Filter> filterRegistrationBean = new FilterRegistrationBean<>();
filterRegistrationBean.setFilter(new MyFilter());
filterRegistrationBean.setOrder(1);
filterRegistrationBean.addUrlPatterns("/*");
return filterRegistrationBean;
}
}