์ง๊ธ๊น์ง ๋๋ต์ ์ธ Spring Security ์ ๊ตฌ์กฐ์ SecurityFilterChain ์ ๋ฑ๋ก๊ณผ์ ์ ์์๋ณด์๋ค. SecurityFilterChain ์ ์ฌ๋ฌ ๊ฐ์ SecurityFilter ๋ค๋ก ๊ตฌ์ฑ๋์ด ์๋ค๊ณ ํ๋๋ฐ, ๊ณผ์ฐ ์ด๋ค ์์ผ๋ก ๋์ด ์์์ง SecurityFilterChain ์ ๋ด๋ถ ๊ตฌ์กฐ์ ๋ํ์ฌ ๋ถ์ํด๋ณด์.
๋ด๋ถ ๊ตฌ์กฐ ๋ถ์
@EnableWebSecurity Debug Mode
@EnableWebSecurity(debug = true) ์์ ๊ฐ์ด Spring Security ์ ์น ๋ณด์ ๊ธฐ๋ฅ์ ํ์ฑํํ๋ annotation ์ธ @EnableWebSecurity ์ Debug Mode ๋ฅผ ์ถ๊ฐํ๋ฉด ์ข ๋ ์ฝ๊ฒ SecurityFilterChain ์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ์ดํด๋ณผ ์ ์๋ค.

Debug Mode ๋ฅผ ์ฌ์ฉํ๋ฉด ์์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค. SpringConfig class ์์ ์๋ฌด๋ฐ Custom SecurityFilterChain ์ define ํ์ง ์๊ณ ๊ธฐ๋ณธ ์ค์ ์์์ SecurityFilterChain ์ ๊ตฌ์กฐ๋ฅผ ์ดํด๋ณด๋ฉด ์ฌ๋ฌ ๊ฐ์ Filter ๋ค์ด ๋ค์ด๊ฐ ์๋ ๋ชจ์ต์ ๋ณผ ์ ์๋ค.
Spring Security Filters
๊ทธ๋ผ Spring Security ์์ ์ ๊ณตํ๋ Filter ๋ค์๋ ์ด๋ค ๊ฒ๋ค์ด ์์๊น?
| ํํฐ๋ช | ์ญํ ์ค๋ช |
|---|---|
| DisableEncodeUrlFilter | URL์ ์ธ์ ID๊ฐ ์ธ์ฝ๋ฉ๋์ด ๋ ธ์ถ๋๋ ๊ฒ์ ๋ฐฉ์ง, ์ธ์ ID๊ฐ URL์ ํฌํจ๋์ง ์๋๋ก ์๋ต์ ๋ํ |
| WebAsyncManagerIntegrationFilter | ๋น๋๊ธฐ(Async) ์์ฒญ ์ฒ๋ฆฌ ์ SecurityContext๊ฐ ๋ค๋ฅธ ์ค๋ ๋์์๋ ๊ณต์ ๋ ์ ์๋๋ก ์ง์ |
| SecurityContextHolderFilter | ์ ๊ทผํ ์ฌ์ฉ์์ ๋ํ์ฌ Security Context ๋ก ๊ด๋ฆฌ |
| HeaderWriterFilter | ์๋ต์ ๋ณด์ ๊ด๋ จ HTTP ํค๋(X-Frame-Options, XSS-Protection ๋ฑ)๋ฅผ ์ถ๊ฐ |
| CorsFilter | Cross-Origin Resource Sharing(CORS) ์ ์ฑ ์ ์ฉ ๋ฐ ์ฒ๋ฆฌ |
| CsrfFilter | CSRF(Cross-Site Request Forgery) ๊ณต๊ฒฉ ๋ฐฉ์ง๋ฅผ ์ํด CSRF ํ ํฐ ๊ฒ์ฌ |
| LogoutFilter | ๋ก๊ทธ์์ ์์ฒญ ์ฒ๋ฆฌ ๋ฐ ์ธ์ ๋ฌดํจํ |
| UsernamePasswordAuthenticationFilter | ๋ก๊ทธ์ธ ํผ์ ์์ด๋/๋น๋ฐ๋ฒํธ ์ธ์ฆ ์ฒ๋ฆฌ |
| DefaultResourcesFilter | ์ ์ ๋ฆฌ์์ค(์ด๋ฏธ์ง, CSS, JS ๋ฑ) ์์ฒญ์ ์ฒ๋ฆฌํ์ฌ ๋ณด์ ํํฐ ์ฒด์ธ์์ ์ ์ธ |
| DefaultLoginPageGeneratingFilter | ๋ณ๋ ๋ก๊ทธ์ธ ํ์ด์ง๊ฐ ์์ ๋ ๊ธฐ๋ณธ ๋ก๊ทธ์ธ ํ์ด์ง๋ฅผ ์๋ ์์ฑ |
| DefaultLogoutPageGeneratingFilter | ๋ณ๋ ๋ก๊ทธ์์ ํ์ด์ง๊ฐ ์์ ๋ ๊ธฐ๋ณธ ๋ก๊ทธ์์ ํ์ด์ง๋ฅผ ์๋ ์์ฑ |
| BasicAuthenticationFilter | HTTP Basic ์ธ์ฆ ํค๋(Authorization) ๊ธฐ๋ฐ ์ธ์ฆ ์ฒ๋ฆฌ |
| RequestCacheAwareFilter | ์ธ์ฆ ์ ์์ฒญ ์ ๋ณด๋ฅผ ์บ์ํ์ฌ, ์ธ์ฆ ์ฑ๊ณต ํ ์๋ ์์ฒญ์ผ๋ก ๋ฆฌ๋ค์ด๋ ํธ |
| SecurityContextHolderAwareRequestFilter | HttpServletRequest๋ฅผ ๋ํํ์ฌ SecurityContext์ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๊ฒ ์ง์ |
| AnonymousAuthenticationFilter | ์ธ์ฆ๋์ง ์์ ์ฌ์ฉ์๋ฅผ ์ต๋ช ์ฌ์ฉ์๋ก ์ฒ๋ฆฌ |
| ExceptionTranslationFilter | ์ธ์ฆ/์ธ๊ฐ ์คํจ ์ ๋ก๊ทธ์ธ ํ์ด์ง ๋ฆฌ๋ค์ด๋ ํธ ๋๋ ์๋ฌ ์๋ต ์ฒ๋ฆฌ |
| AuthorizationFilter | URL ๋ฐ ๋ฆฌ์์ค ์ ๊ทผ ๊ถํ(์ธ๊ฐ) ๊ฒ์ฌ, Spring Security 5.5๋ถํฐ FilterSecurityInterceptor๋ฅผ ๋์ฒด |
Custom Filter ๋ฑ๋ก
ํน์ SecurityFilterChain ์ Filter ๋ฅผ ๋ฑ๋กํ๊ณ ์ถ๋ค๋ฉด ๋ค์ method ๋ค์ ์ฌ์ฉํ๋ฉด ๋๋ค.
.addFilterBefore(customFilter, beforeFilter.class);addFilterBefore: ์ง์ ํ Filter ์์ Custom Filter ๋ฅผ ์ถ๊ฐaddFilterAfter: ์ง์ ํ Filter ๋ค์ Custom Filter ๋ฅผ ์ถ๊ฐaddFilterAt: ์ง์ ํ Filter ์๋ฆฌ์(๊ฐ์ order ๋ก) Custom Filter ๋ฅผ ์ถ๊ฐ
๊ทธ๋ฌ๋ ๊ฐ์ order ์ ์ฌ๋ฌ Filter ๊ฐ ์กด์ฌํ๋ฉด ์ ๋งคํ ์ํฉ์ด ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก ํน๋ณํ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ๋ค.