Filter
๐ 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
1
2
3
4
5
6
7
8
9
10
11
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๋ฅผ ๊ตฌํํ๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
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์ ๋ฑ๋กํ๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
@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;
}
}