[Spring Security] DelegatingFilterProxy์ FilterChainProxy
๐ Filter
Spring Security๋ Filter
๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ค. Filter
๋ ๋ฌด์์ผ๊น?
ํด๋ผ์ด์ธํธ๊ฐ WAS, Web Application Server
์ ์์ฒญ(HttpServletRequest
)์ ๋ณด๋ด๋ฉด ์๋ธ๋ฆฟ ์ปจํ
์ด๋๋ URI์ Servlet
์ ๋ณด๊ณ FilterChain
์ ์์ฑํ๋ค.
์์ฒญ์ ์ต์ข
์ ์ผ๋ก Servlet
์ ๋์ฐฉํ๋๋ฐ, ์ด ๊ณผ์ ์์ ์ฌ๋ฌ ๊ฐ์ Filter
๋ฅผ ๊ฑฐ์น๊ฒ ๋๋ค. ์ด๋ฌํ ์ผ๋ จ์ ๋จ๊ณ๋ค์ FilterChain
์ด๋ผ๊ณ ํ๋ค.
Servlet
์ ์ค์ง์ ์ธ ๋น์ฆ๋์ค ๋ก์ง์ ์ํํ๋ ์์
์์ด๋ฉฐ, Spring MVC์์๋ ๋๋ถ๋ถ์ด DispatcherServlet
์ด ๋ด๋นํ๋ค. ํ๋์ ์์ฒญ์ ๋จ ํ๋์ Servlet
์ ์ํด ์ฒ๋ฆฌ๋๋ค.
Filter
๋ ์ค๊ฐ ์์
์๋ก, ์ง์ง ์ด๋ฆ ๊ทธ๋๋ก Servlet
์ ๋๋ฌํ๊ธฐ๊น์ง โํํฐโ ์ญํ ์ ํ๋ค. ๋ฐ์ ์์ฒญ์ ๊ฑฐ์ ํ๊ฑฐ๋ ์กฐ์ํ ์ ์๋ค.
1
2
3
4
5
6
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
chain.doFilter(request, response);
}
์ํํ ์์
์ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ํํฐ์ ๋๊ธฐ๊ธฐ ์ํด doFilter
๋ฉ์๋๋ FilterChain
์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋๋ค. chain.doFilter(request, response)
์ ํ์ฌ ์์
์ ์์ฒญ๊ณผ ์๋ต์ ๋ค์ ํํฐ๋ก ๋๊ธฐ๋ ๋์์ ์ํํ๋ค.
์ด๋ ๋ฉ์๋ ๋ด๋ถ์์ doFilter
๋ฉ์๋๋ฅผ ํธ์ถํ๊ธฐ ์ ํ๋ก ์์
์ ์ ์ํ์ฌ ์ /ํ์ฒ๋ฆฌ ์์
์ ์ํํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
ํํฐ๋ ์์ ๋ค์ ์๋ ํํฐ์ ์๋ธ๋ฆฟ์๋ง ์ํฅ์ ์ฃผ๊ธฐ ๋๋ฌธ์, ์คํ ์์๊ฐ ์ค์ํ๋ค.
๐ DelegatingFilterProxy
์์ ์ดํด ๋ณธ ํํฐ๋ ์๋ธ๋ฆฟ ์ปจํ
์ด๋์์ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ค. ๋ฐ๋ฉด ๊ฐ๋ฐ์๊ฐ ์์ฑํ ๊ฐ์ฒด๋ ์ค์ ์ ์คํ๋ง์ IoC ์ปจํ
์ด๋๊ฐ ๋น์ผ๋ก ๊ด๋ฆฌํ๋ค. ์ด๋ ๋ ์ปจํ
์ด๋์ ์๋ช
์ฃผ๊ธฐ๊ฐ ๋ค๋ฅด๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ํํฐ์์ @Autowired
๋ฅผ ํตํด ์คํ๋ง ๋น์ ์ฃผ์
๋ฐ์ ์ ์๋ค๋ ๊ฒ์ด๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ํํฐ๊ฐ DelegatingFilterProxy
์ด๋ค. DelegatingFilterProxy
์๋ ์ด๋ ํ ๋ณด์ ๋ก์ง๋ ์์ผ๋ฉฐ, ์ ์ผํ๊ฒ ํ๋ ๋์์ ์คํ๋ง ์ปจํ
์ด๋์์ โํน๋ณํ ๋นโ์ ์ฐพ์ ํด๋น ๋น์๊ฒ ๋ชจ๋ ์ฒ๋ฆฌ๋ฅผ ์์ํ๋ ๊ฒ์ด๋ค.
๐ FilterChainProxy
๋ณด์ ์ฒ๋ฆฌ๋ฅผ ์์๋ฐ๋ ํน๋ณํ ๋น์ด ๋ฌด์์ผ๊น? ๋ฐ๋ก FilterChainProxy
์ด๋ค. FilterChainProxy
๋ ์คํ๋ง IoC ์ปจํ
์ด๋์ ๋ฑ๋ก๋์ด ์๋ค.
1
2
3
4
5
6
public class FilterChainProxy extends GenericFilterBean {
// ...
private List<SecurityFilterChain> filterChains;
}
FilterChainProxy
๋ ๋ด๋ถ์ ์ผ๋ก List<SecurityFilterChain>
๋ฅผ ๊ฐ์ง๊ณ ์๋ค. DelegatingFilterProxy
๋ก๋ถํฐ ์์ฒญ์ ์ ๋ฌ๋ฐ์ผ๋ฉด ์์ฒญ์ URI, HTTP ๋ฉ์๋ ๋ฑ์ ๋ณด๊ณ filterChains
์์ ํด๋น ์์ฒญ์ ๊ฐ์ฅ ์ ํฉํ SecurityFilterChain
์ ํ๋ ์ ํํ๋ค. ์ดํ ์ ํํ SecurityFilterChain
์ ๋ฑ๋ก๋ ๋ณด์ ํํฐ๋ค์ ์์ฐจ์ ์ผ๋ก ์คํ์ํค๊ณ , ์ฑ๊ณต์ ์ผ๋ก ํต๊ณผ๋๋ฉด ์์ฒญ์ DispatcherServlet
์ผ๋ก ์ ๋ฌํ๋ค.
๐ ์ฐธ๊ณ
https://docs.spring.io/spring-security/reference/servlet/architecture.html