Spring Security
์ด ๋ด์ฉ์ Spring Security Architecture ๊ณต์ ๋ฌธ์์ ๋๋ค. Servlet์ ๊ธฐ๋ฐ์ผ๋กํ๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ์คํ๋ง ์ํ๋ฆฌํฐ ์ํคํ ์ณ์ ๋ํ ๋ด์ฉ์ ๋ค๋ฃจ๊ณ ์์ต๋๋ค.
Architecture
Review of Filters
์คํ๋ง ์ํ๋ฆฌํฐ์ Servlet์ Servlet Filter ๋ ๋ฒจ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค. ์๋ ์ด๋ฏธ์ง๋ HTTP request์ ๋ํ ํธ๋ค๋ฌ์ ์ผ๋ฐ์ ์ธ ๊ตฌ์กฐ๋ฅผ ๋ํ๋ธ๋ค.

ํด๋ผ์ด์ธํธ๋ ์ดํ๋ฆฌ์ผ์ด์ ์ request๋ฅผ ๋ณด๋ด๊ณ ์ปจํ ์ด๋๋ Filter์ Servlet์ ํฌํจํ๋ FilterChain์ ์์ฑํ๋ค. ์ด ๋ request URI ๊ฒฝ๋ก์ ๊ธฐ๋ฐํด HttpServletRequest๋ฅผ ์ฒ๋ฆฌํ๋ค. ์คํ๋ง MVC ์ดํ๋ฆฌ์ผ์ด์ ์์ Servlet์ DispatcherServlet์ ๊ตฌํ์ฒด์ด๋ค.
ํ๋์ Servlet์ ๊ธฐ๊ปํด์ผ 1๊ฐ์ HttpServletRequest์ HttpServletResponse๋ฅผ ๋ค๋ฃฌ๋ค. ๊ทธ๋ฌ๋ 2๊ฐ ์ด์์ Filter๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ ์์ ์ ์ํํ ์ ์๋ค.
๋ค์ Filter๊ฐ ํธ์ถ๋์ง ์๋๋ก ํ๋ค. ์ด ๊ฒฝ์ฐ Filter๋ HttpServletResponse๋ฅผ ์์ฑํ๋ค.
๋ค์ Filter์ Servlet์์ ์ฌ์ฉ๋๋ HttpServletRequest ๋๋ HttpServletResponse๋ฅผ ์์ ํ๋ค.
Filter์ ํจ๊ณผ๋ ์ด๋ฅผ ํต๊ณผํ๋ FilterChain์ ์๋ค.
ํ๋์ Filter๋ ๋ค์ Filter ๊ตฌํ์ฒด์ Servlet์๋ง ์ํฅ์ ์ค ์ ์๋ค. ๋ฐ๋ผ์ ๊ฐ๊ฐ์ Filter๊ฐ ์ฌ์ฉ๋๋ ์์๋ ์๋นํ ์ค์ํ๋ค.
DelegatingFilterProxy
์คํ๋ง์ DelegatingFlterProxy ๋ฅผ ์ ๊ณตํ๋ค. ์ด๋ Servlet ์ปจํ
์ด๋์ ์คํ๋ง์ Application Context ์ฌ์ด๋ฅผ ์ฐ๊ฒฐํด์ค๋ค. Servlet ์ปจํ
์ด๋๋ Servlet ์คํ์ด๊ธฐ ๋๋ฌธ์ ์คํ๋ง์์ ์ ์๋ ๋น์ ์ฃผ์
๋ฐ์ ์ฌ์ฉํ ์ ์๋ค.
์ด ๋ DelegatingFilterProxy๋ฅผ ํตํด ์คํ๋ง ์ปจํ ์ด๋์์ ์กด์ฌํ๋ ํน์ Bean์ ์ฐพ์ ์์ฒญ์ ์์ํ๋ค.

FilterChainProxy
FilterChainProxy ๋ ์คํ๋ง ์ํ๋ฆฌํฐ์ ์ํด ์ ๊ณต๋๋ ํน๋ณํ ํํฐ์ด๋ค. SecurityFilterChain์ ํตํด ๋ง์ ํํฐ ์ธ์คํด์ค๋ฅผ ์์ํ๋ค.FilterChainProxy๋ Bean์ด๋ฏ๋ก DelegatingFilterProxy๋ก wrapping๋๋ค.

SecurityFilterChain
SecurityFilterChain์ ํ์ฌ request์์ ์ด๋ค ์คํ๋ง ์ํ๋ฆฌํฐ Filter ์ธ์คํด์ค๊ฐ ์ฌ์ฉ๋์ด์ผ ํ ์ง ๊ฒฐ์ ํ๊ธฐ ์ํด FilterChainProxy์ ์ํด์ ์ฌ์ฉ๋๋ค.

SecurityFilterChain ์์ Security Filter๋ค์ ์ผ๋ฐ์ ์ผ๋ก Bean์ด๋ค. ๊ทธ๋ฌ๋ DelegatingFilterProxy ๋์ ์ FilterChainProxy ๋ก ๋ฑ๋ก๋๋ค.
FilterChainProxy ๋ Servlet ์ปจํ
์ด๋๋ DelegatingFilterProxy์ ์ง์ ์ ์ผ๋ก ๋ฑ๋กํ๋ ๊ฒ์ ๋ง์ ์ด์ ์ ์ ๊ณตํ๋ค.
์คํ๋ง ์ํ๋ฆฌํฐ Servlet์ ์์์ ์ ์ ๊ณตํ๋ค. โ trouble shooting์ ์ฉ์ด
๋ณด์ด์ง ์๋ ์์ ์ ์ํํ ์ ์๋ค. (HttpFireWall ๋ฑ)
SecurityFilterChain์ด invoke๋๋ ์์ ์ ๊ฒฐ์ ํ๋ ๋ฐ์ ์ ์ฐ์ฑ์ ์ ๊ณตํ๋ค.
URL์ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋๋ฐ, RequestMathcer interface๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ invocation์ ๊ฒฐ์ ํ ์ ์๋ค.

์ ๊ทธ๋ฆผ์์ FilterChainProxy ๊ฐ ์ด๋ค SecurityFilterChain์ด ์ฌ์ฉ๋ ์ง ๊ฒฐ์ ํ๋ค. ๋ถํฉํ๋ ์ฒซ๋ฒ์งธ SecurityFilterChain ๋ง ์ ์ฉ๋๋ค. ๋ง์ฝ /api/message/ ๊ฐ ์์ฒญ๋๋ค๋ฉด, /api/** ํจํด์ ์ด ๋งค์น๋๋ค. ๋ฐ๋ผ์ ๋น๋ก๋ ๋งค์น๋ ์ง๋ผ๋, ์ด ์คํ๋๋ค.
๋ง์ฝ /essages/ URL์ด ์์ฒญ๋๋ค๋ฉด ๊ณผ๋ ๋งค์น๋์ง ์๋๋ค. ๋ฐ๋ผ์ FilterChainProxy ๋ ๊ฐ๊ฐ์ SecurityFiterChain ์ ์๋ํด๋ณด๋ค๊ฐ ๊ฒฐ๊ตญ ์ด ์ ์ฉ๋๋ค.
์ 3๊ฐ์ Filter ์ธ์คํด์ค๋ก ๊ตฌ์ฑ๋์ด์๊ณ , ์ 4๊ฐ์ ํํฐ ์ธ์คํด์ค๋ก ๊ตฌ์ฑ๋์ด ์๋ค. ๊ฐ๊ฐ์ SecurityFilterChain ์ ํน๋ณํ๊ณ ๋
๋ฆฝ์ ์ผ๋ก ๊ตฌ์ฑ๋ ์ ์๋ค. ์ฌ์ค SecurityFilterChain ์ ๋ง์ฝ ์ดํ๋ฆฌ์ผ์ด์
์ด Spring Security๊ฐ ํน์ request๋ฅผ ๋ฌด์ํ๊ธธ ์ํ๋ค๋ฉด, Filter ์ธ์คํด์ค๋ฅผ ๊ฐ์ง์ง ์๊ฒ ํ ์๋ ์๋ค.
Security Filters
Security Filter๋ SecurityFilterChain API์ ํจ๊ป FilterChainProxy์ ์ฝ์ ๋๋ค. ์ด Filter๋ค์ ์ธ์ฆ, ์ธ๊ฐ ๋ฑ ๋ค์ํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋ ์ ์๋ค. Filter๋ ์ํ๋ ์์๋ก ์คํ๋๊ธฐ ์ํด ํน์ ํ ์์๋ก ์คํ๋๋ค. ์๋ฅผ ๋ค์ด ์ธ์ฆ์ ์ํํ๋ Filter๋ ์ธ๊ฐ๋ฅผ ์ํํ๋ Filter ์ ์ ์คํ๋์ด์ผ ํ๋ค. Spring Security์ Filter๋ค์ ์์๋ฅผ ์๋ ๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ํ์ํ ๊ฒ์ ์๋์ง๋ง, ์์๋ฅผ ์๋ ๊ฒ์ด ๋์์ด ๋๋ ๋๊ฐ ์๋ค.
security configuration์ ํ๊ฐ์ง ์๋ฅผ ๋ค์ด๋ณด์.
์ Configuration์ ๋ค์์ Filter ์์๋ฅผ ๊ฐ์ง๋ค.
CsrfFilter โ
HttpSecurity#csrfCsrfFilter๋ CSRF ๊ณต๊ฒฉ์ ๋ง๊ธฐ ์ํด ์คํ๋๋ค.
UsernamePasswordAuthenticationFilter โ
HttpSecurity#formLoginBasicAuthenticationFilter โ
HttpSecurity#httpBasicrequest๋ฅผ authenticateํ๊ธฐ ์ํด ์คํ๋๋ค.
AuthorizationFilter โ
HttpSecurity#authorizeHttpRequestsAuthorizationFilter๋ request๋ฅผ authorize ํ๊ธฐ ์ํด ์คํ๋๋ค.
์์ ๋์์๋ Filter ์ธ์ ๋ค๋ฅธ Filter ์ธ์คํด์ค๊ฐ ์์ ์ ์๋ค. ํน์ request์ ์คํ๋๋ Filter ๋ฆฌ์คํธ๋ฅผ ๋ณด๊ณ ์ถ๋ค๋ฉด, print ํด์ ๋ณผ ์ ์๋ค.
Printing the Security Filters
๊ฐ๋์ ํน์ request์ ์คํ๋๋ Security Filter ๋ฆฌ์คํธ๋ฅผ ๋ณด๋๊ฒ ์ ์ฉํ ๋๋ ์๋ค. ์๋ฅผ ๋ค์ด ์ถ๊ฐํ Filter๊ฐ ํ์คํ ์คํ๋๋์ง ํ์ธํ๊ณ ์ถ๋ค๋ฉด ํ์ธํ๋ฉด ๋๋ค.
Filter ๋ฆฌ์คํธ๋ ์ดํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋ ๋ INFO ๋ ๋ฒจ์์ ํ๋ฆฐํธ๋๋ค. ๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ด ์ฝ์์์ ํ์ธํ ์ ์๋ค.
๋๋ ์ง์ logging์ ์ด์ฉํด์ ํ์ธํ ์๋ ์๋ค.
Adding a Custom Filter to the Filter Chain
๋๋ถ๋ถ ๊ธฐ๋ณธ Security Filter๋ค์ ์ดํ๋ฆฌ์ผ์ด์ ์ security๋ฅผ ์ ๊ณตํ๊ธฐ์ ์ถฉ๋ถํ๋ค. ํ์ง๋ง Custom Filter๋ฅผ security filter chain์ ์ถ๊ฐํ๊ณ ์ถ์ ๋๊ฐ ์กด์ฌํ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด, tenant id header๋ฅผ ๊ฐ์ ธ๊ฐ์ ํ์ฌ ์ ์ ๊ฐ ํด๋น tenant์ ์ ๊ทผ์ ๊ฐ์ง๊ณ ์๋์ง ํ์ธํ๋ Filter๋ฅผ ์ถ๊ฐํ๊ณ ์ถ๋ค๊ณ ํด๋ณด์. ์ฐ๋ฆฌ๋ ํ์ฌ ์ ์ ๋ฅผ ์ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ด๋์ Filter๋ฅผ ์ถ๊ฐํด์ผ ํ ์ง ์ ์ ์๋ค. ์ฐ๋ฆฌ๋ ์ธ์ฆ Filter ๋ค์๋ค๊ฐ ์ถ๊ฐํด์ผ ํ๋ค.
์ํ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ด ๋์ํ๋ค.
request header๋ก๋ถํฐ tenant id๋ฅผ ์ป๋๋ค.
ํ์ฌ ์ ์ ๊ฐ tenant id์ ์ ๊ทผ ๊ถํ์ด ์๋์ง ๊ฒ์ฌํ๋ค.
์ ๊ทผ ๊ถํ์ ๊ฐ์ง๊ณ ์๋ค๋ฉด ๋๋จธ์ง ํํฐ๋ฅผ ์คํํ๋ค.
์ ๊ทผ ๊ถํ์ด ์๋ค๋ฉด
AccessDeniedException์ ๋์ง๋ค.
Filter๋ฅผ implements ํ๋ ๋์ ,OncePerRequestFilter๋ฅผ extends ํ ์๋ ์๋ค.OncePerRequestFilter๋ filter์ base class์ด๊ณ , request ๋น 1๋ฒ๋ง ์คํ๋๋ค. ๊ทธ๋ฆฌ๊ณHttpServletRequest์HttpServletResponse๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋doFilterInternal๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค.
์ด์ , Filter๋ฅผ security filter chain์ ์ ์ฉํด๋ณด์.
AuthorizationFilter ์ ์ TenantFilter๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด HttpSecurity#addFilterBefore ๋ฅผ ์ฌ์ฉํ๋ค.
์ด ํํฐ๋ฅผ AythorizationFilter ์ ์ ์ถ๊ฐํจ์ผ๋ก์จ TenantFilter ๊ฐ authentication ํํฐ ๋ค์ ์คํํ๊ฒ ํ๋ค. ๋ํ ํน์ ํํฐ ๋ค์ ์๋ก์ด ํํฐ๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด HttpSecurity#addFilterAfter ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋, ํน์ ํํฐ ํฌ์ง์
์ ์๋ก์ด ํ๋ฌ๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด HttpSecurity#addFilterAt ์ ์ฌ์ฉํ ์ ์๋ค.
์ปค์คํ
ํํฐ๋ฅผ ์คํ๋ง ๋น์ผ๋ก ์ ์ธํ ๋ ์ฃผ์ํด์ผ ํ๋ค. ํํฐ์ @Component ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ๊ฑฐ๋ configuration์ ๋น์ผ๋ก ์ ์ธํ๊ฑฐ๋ ๋ ์ค์ ํ๋๋ง ์ฌ์ฉํด์ผ ํ๋ค. ์คํ๋ง ๋ถํธ๋ ์๋์ ์ผ๋ก ์ด๊ฒ์ ๋ด์ฅ๋ ์ปจํ
์ด๋์ ๋ฑ๋กํ๋ค. ๋ฐ๋ผ์ ํํฐ๊ฐ ์ปจํ
์ด๋์ ์ํด 1๋ฒ, ์คํ๋ง ์ํ๋ฆฌํฐ์ ์ํด์ 1๋ฒ ์ด 2๋ฒ invoke๋ ์ ์๋ค.
๋ง์ฝ DI์ ์ด์ ์ ์ป๊ธฐ ์ํด Spring Bean์ผ๋ก ํํฐ๋ฅผ ๋ฑ๋กํ๋ฉด์ ์ค๋ณต invocation์ ํผํ๋ ค๋ฉด, FilterRegistrationBean ์ผ๋ก ์ ์ธํ๊ณ enabled ์ false๋ก ์ค์ ํจ์ผ๋ก์จ ์คํ๋ง ๋ถํธ๊ฐ ํํฐ๋ฅผ ์ปจํ
์ด๋์ ๋ฑ๋กํ์ง ์๊ฒ ํ ์ ์๋ค.
Handling Security Exceptions
ExceptionTranslationFilter ๋ AccessDeniedException ๊ณผ AuthenticationException ์ HTTP response ์ผ๋ก ๋ณํํ ์ ์๋ค. ExceptionTranslationFilter ๋ Security Filter ์ค ํ๋๋ก FilterChainProxy์ ์ฝ์
๋๋ค.
์๋ ์ด๋ฏธ์ง๋ ExceptionTranslationFilter ์ ๋ค๋ฅธ ์ปดํฌ๋ํธ์์ ๊ด๊ณ๋ฅผ ๋ณด์ฌ์ค๋ค.

ExceptionTranslationFilter๊ฐ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋๋จธ์ง ๋ถ๋ถ์ ์คํํ๊ธฐ ์ํดFilterChain.doFilter(request, response)๋ฅผ ์คํํ๋ค.๋ง์ฝ ์ ์ ๊ฐ ์ธ์ฆ๋์ง ์์๊ฑฐ๋
AuthenticationException์ธ ๊ฒฝ์ฐ, Authentication์ ์์ํ๋ค.SecurityContextHolder๊ฐ ์ด๊ธฐํ๋๋ค.
HttpServletRequest๋ ์ธ์ฆ์ด ์ฑ๊ณตํ๋ฉด original request๋ฅผ replayํ๋๋ฐ ์ฌ์ฉํ ์ ์๋๋ก ์ ์ฅ๋๋ค.AutenticationEntryPoint๋ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ credential์ ์์ฒญํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ํธํ๊ฑฐ๋,WWW-Authenticateํค๋๋ฅผ ๋ณด๋ผ ์ ์๋ค.
AccessDeniedException์ธ ๊ฒฝ์ฐ, ์ ๊ทผ์ ์ ํํ๋ค.AccessDeniedHandler๊ฐ ์ ๊ทผ์ ์ ํํ๊ธฐ ์ํด ์คํ๋๋ค.
๋ง์ฝ ์ดํ๋ฆฌ์ผ์ด์ ์ด
AccessDeniedException์ด๋AuthenticationException์ ์ผ์ผํค์ง ์๋๋ค๋ฉด,ExceptionTranslationFilter๋ ์๋ฌด๊ฒ๋ ํ์ง ์๋๋ค.
ExceptionTranslationFilter ์ ์์ฌ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ด ๋ํ๋ผ ์ ์๋ค.
FilterChain.doFilter(request, response)๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋๋จธ์ง ๋ถ๋ถ์ ์คํํ๋ ๊ฒ๊ณผ ๊ฐ๋ค. ๋ง์ฝ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋๋จธ์ง ๋ถ๋ถ์ดAuthenticationException๋๋AccessDeniedException์ ๋ฐ์์ํจ๋ค๋ฉด, ์ฌ๊ธฐ์ ์ฒ๋ฆฌ๋๋ค.๋ง์ฝ ์ ์ ๊ฐ ์ธ์ฆ๋์ง ์์๊ฑฐ๋
AuthenticationException์ธ ๊ฒฝ์ฐ, Authentication์ ์์ํ๋ค.๊ทธ๋ ์ง ์๋ค๋ฉด, ์ ๊ทผ์ ์ ํํ๋ค.
Saving Requests Between Authentication
request๊ฐ authentication์ ๊ฐ์ง๊ณ ์์ง ์๊ณ authentication์ ์๊ตฌํ๋ ๋ฆฌ์์ค์ผ ๋, ์ธ์ฆ์ด ์ฑ๊ณตํ ํ re-requestํ๊ธฐ ์ํด ์ธ์ฆ๋ ๋ฆฌ์์ค์ ๋ํ ์์ฒญ์ ์ ์ฅํ ํ์๊ฐ ์๋ค. ์คํ๋ง ์ํ๋ฆฌํฐ์์ ์ด ๊ฒ์ RequestCache ๊ตฌํ์ฒด๋ฅผ ์ฌ์ฉํ๋ HttpServletRequest ๋ฅผ ์ ์ฅํจ์ผ๋ก์จ ์ด๋ค์ง๋ค.
RequestCache
HttpServletRequest ๋ RequestCache ์ ์ ์ฅ๋๋ค. ์ ์ ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ธ์ฆ๋์์ ๋, RequestCache ๋ ์๋์ request๋ฅผ replayํ๋ค. RequestCacheAwareFilter ๋ ์ ์ ๊ฐ ์ธ์ฆ๋ ํ ์ ์ฅ๋ HttpServletRequest ๋ฅผ ์ป๊ธฐ ์ํด RequestCache ๋ฅผ ์ฌ์ฉํ๋ค. ๋ฐ๋ฉด์ ExceptionTranslationFilter ๋ ์ ์ ๋ฅผ ๋ก๊ทธ์ธ endpoint๋ก ๋ฆฌ๋ค์ด๋ ํธ ํ๊ธฐ ์ ์ด๋ AuthenticationException ์ ๋ฐ๊ฒฌํ ํ์ HttpServletRequest ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด RequestCache ๋ฅผ ์ฌ์ฉํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก, HttpSessionRequestCache ๊ฐ ์ฌ์ฉ๋๋ค. ์๋ ์ฝ๋๋ RequestCache ๊ตฌํ์ฒด๋ฅผ ์ปค์คํ
ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช
ํ๋ค. ์ ์ฅ๋ request์ continue ๋ผ๋ ์ด๋ฆ์ ํ๋ผ๋ฏธํฐ๊ฐ ์กด์ฌํ๋์ง ์๋์ง HttpSession ์ ์ฒดํฌํ๋ค.
Prevent the Request From Being Saved
์ ์ ์ ์ธ์ฆ๋์ง ์์ request๋ฅผ ์ธ์ ์ ์ ์ฅํ๊ณ ์ถ์ง ์์ ์ฌ๋ฌ๊ฐ์ง ์ด์ ๊ฐ ์์ ๊ฒ์ด๋ค. ์ ์ฅ ๋ด์ฉ์ ์ ์ ์ ๋ธ๋ผ์ฐ์ ๋ก ์ ์ฅ์ํค๊ณ ์ถ๊ฑฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ์ํค๊ณ ์ถ์ ์ ์๋ค. ๋๋ ๋ก๊ทธ์ธ ํ๊ธฐ ์ ์ ์ ๊ฐ ๋ฐฉ๋ฌธํ๋ คํ ํ์ด์ง ๋์ ์ ํญ์ ํ ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ์ ์ ์ํ๋ฉด ์ด ๊ธฐ๋ฅ์ ์ฐจ๋จํ ์ ์๋ค.
์ด๋ฅผ ์ํด์ NullRequestCache ๊ตฌํ์ฒด๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
RequestCacheAwareFilter
RequestCacheAwareFilter ๋ original request๋ฅผ replay ํ๊ธฐ ์ํด RequestCache ๋ฅผ ์ฌ์ฉํ๋ค.
Logging
์คํ๋ง ์ํ๋ฆฌํฐ๋ ๊ด๋ จ๋ ๋ชจ๋ ์ํ๋ฆฌํฐ ์ด๋ฒคํธ์ ๋ํด DEBUG์ TRACE ๋ ๋ฒจ๋ก ํฌ๊ด์ ์ธ ๋ก๊น ์ ์ ๊ณตํ๋ค. ์ด๋ ๋ณด์์ ์ํด ์คํ๋ง ์ํ๋ฆฌํฐ๊ฐ request๊ฐ ๊ฑฐ๋ถ๋ ์ด์ ๋ฅผ response body์ ๋ด์ง ์๊ธฐ ๋๋ฌธ์ ์ ์ฉํ ์ ์๋ค. ๋ง์ฝ 401 ์๋ฌ๋ 403 ์๋ฌ๋ฅผ ๋ง๋๋ค๋ฉด, ์ด๋ป๊ฒ ์งํ๋๊ณ ์๋์ง ์ดํดํ๋ ๊ฒ์ ๋๋ ๋ก๊ทธ ๋ฉ์ธ์ง๋ฅผ ์ฐพ๋ ๊ฒ์ด ์ข๋ค.
ํ ์ ์ ๊ฐ POST requst๋ฅผ CSRF ํ ํฐ ์์ด CSRF ํ๋กํ ์ ์ด ํ์ฑํ๋ ๋ฆฌ์์ค์ POST request๋ฅผ ์๋ํ๋ ์๋ฅผ ๋ค์ด๋ณด์. ๋ก๊ทธ์์ด ์ฌ์ฉ์๋ ์ request๊ฐ ๊ฑฐ์ ๋๋์ง์ ๋ํ ์ด์ ์ ๋ํ ์ค๋ช ์์ด 403 ์๋ฌ๋ฅผ ๋ง์ฃผํ๋ค. ๊ทธ๋ฌ๋ ๋ง์ฝ ์คํ๋ง ์ํ๋ฆฌํฐ์ ๋ํด ๋ก๊น ์ ์ ์ฉํ๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ์ ๋ฉ์ธ์ง๋ฅผ ๋ณผ ์ ์๋ค.
CSRF ํ ํฐ์ด ์๋ค๋ ๊ฒ์ด ๋ช ํํด์ง๊ณ request๊ฐ ๊ฑฐ์ ๋ ์ด์ ๋ฅผ ์๊ฒ๋๋ค.
์ดํ๋ฆฌ์ผ์ด์ ์ด ๋ชจ๋ ์ํ๋ฆฌํฐ ์ด๋ฒคํธ์ ๋ํด ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ๋๋ก ์ค์ ํ๊ธฐ ์ํด, ๋ค์ ์ค์ ์ ์ถ๊ฐํ๋ค.
application.proerties
logback.xml
Last updated