์คํ๋ง ์ํ๋ฆฌํฐ๋ ํํฐ ๊ธฐ๋ฐ์ผ๋ก ์๋ํ๋ฉฐ, ์ธ์ฆ/์ธ๊ฐ ๊ณผ์ ์ ์ฒด๊ณ์ ์ผ๋ก ๋ถ๋ฆฌํ์ฌ ์ฒ๋ฆฌํจ.
FilterChainโAuthenticationFilterโAuthenticationManagerโProviderํ๋ฆ์ผ๋ก ๊ตฌ์ฑ๋จ.
/login, ๋๋ ์ฌ์ฉ์ ์ง์ ์๋ํฌ์ธํธ/api/** ๋ฑFilterChainProxy์์ ๋ฑ๋ก๋ ์ํ๋ฆฌํฐ ํํฐ ์ฒด์ธ์ ๊ฑฐ์นจ| ํํฐ | ์ญํ |
|---|---|
UsernamePasswordAuthenticationFilter | ๋ก๊ทธ์ธ ์ ID/PW ๊ธฐ๋ฐ ์ธ์ฆ ์ํ |
OncePerRequestFilter (JWT ์ปค์คํ
ํํฐ) | ๋งค ์์ฒญ๋ง๋ค JWT ํ ํฐ ํ์ฑ ๋ฐ ์ฌ์ฉ์ ์ธ์ฆ ์ฒ๋ฆฌ |
ExceptionTranslationFilter | ์ธ์ฆ/์ธ๊ฐ ์คํจ ์์ธ ์ฒ๋ฆฌ |
FilterSecurityInterceptor | ๊ถํ(์ธ๊ฐ) ๊ฒ์ฌ ์ํ |
ํด๋ผ์ด์ธํธ โ ์์ฒญ
โ
SecurityFilterChain (์ฌ๋ฌ ํํฐ๋ค)
โ
โ
JwtAuthenticationFilter (OncePerRequestFilter ์์)
โ
JWT ๊ฒ์ฆ & ์ฌ์ฉ์ ์ ๋ณด ์ถ์ถ
โ
SecurityContextHolder.setAuthentication(...)
โ
์ธ์ฆ ์ฑ๊ณต โ ๋ค์ ํํฐ๋ก ์ ๋ฌ
Authentication ๊ฐ์ฒด๊ฐ SecurityContextHolder์ ์ ์ฅ๋จ@AuthenticationPrincipal, SecurityContextHolder.getContext().getAuthentication() ๋ฑ์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅ| ๊ตฌ์ฑ ์์ | ์ค๋ช |
|---|---|
Authentication | ์ธ์ฆ ์ ๋ณด ๊ฐ์ฒด (id, role, credentials ๋ฑ ํฌํจ) |
UserDetails | ์ฌ์ฉ์ ์์ธ ์ ๋ณด (CustomUserDetails๋ก ๊ตฌํ) |
AuthenticationProvider | ์ธ์ฆ ์ฒ๋ฆฌ ๋ก์ง ๊ตฌํ์ฒด (e.g. JWT, DB ์กฐํ ๊ธฐ๋ฐ ๋ฑ) |
SecurityContextHolder | ์ธ์ฆ๋ ์ฌ์ฉ์๋ฅผ ์์ฒญ ์ค๋ ๋ ๋ด์ ์ ์ฅํ๋ ์ปจํ ์คํธ |
โSpring Security๋ ํํฐ ๊ธฐ๋ฐ ๊ตฌ์กฐ๋ก ์์ฒญ์ด ๋ค์ด์ค๋ฉด ๋จผ์ ์ฌ๋ฌ ๋ณด์ ํํฐ๋ฅผ ๊ฑฐ์นฉ๋๋ค.
JWT๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐOncePerRequestFilter๋ฅผ ์์ํ ์ปค์คํ ํํฐ์์ ํ ํฐ์ ๊ฒ์ฆํ๊ณ ,
์ธ์ฆ ์ ๋ณด๋ฅผSecurityContextHolder์ ์ ์ฅํ์ฌ ์ดํ ์ธ๊ฐ ์ฒ๋ฆฌ๊น์ง ์ฐ๋๋๋๋ก ๊ตฌ์ฑํฉ๋๋ค.โ