๐Ÿ” Spring Security ์ธ์ฆ ํ•„ํ„ฐ ํ๋ฆ„ ์ •๋ฆฌ

๊น€์ •๊ทœยท2025๋…„ 6์›” 19์ผ

โœ… Spring Security ์ธ์ฆ ๊ตฌ์กฐ ์š”์•ฝ

์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋Š” ํ•„ํ„ฐ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•˜๋ฉฐ, ์ธ์ฆ/์ธ๊ฐ€ ๊ณผ์ •์„ ์ฒด๊ณ„์ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฒ˜๋ฆฌํ•จ.
FilterChain โ†’ AuthenticationFilter โ†’ AuthenticationManager โ†’ Provider ํ๋ฆ„์œผ๋กœ ๊ตฌ์„ฑ๋จ.


๐Ÿ” ์ „์ฒด ์ธ์ฆ ํ๋ฆ„ ์ˆœ์„œ

1. ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ

  • ๋กœ๊ทธ์ธ ์‹œ: /login, ๋˜๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ์—”๋“œํฌ์ธํŠธ
  • ์ผ๋ฐ˜ ์š”์ฒญ ์‹œ: /api/** ๋“ฑ

2. Security Filter Chain

  • ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด FilterChainProxy์—์„œ ๋“ฑ๋ก๋œ ์‹œํ๋ฆฌํ‹ฐ ํ•„ํ„ฐ ์ฒด์ธ์„ ๊ฑฐ์นจ

3. ์ฃผ์š” ํ•„ํ„ฐ ๊ตฌ์„ฑ

ํ•„ํ„ฐ์—ญํ• 
UsernamePasswordAuthenticationFilter๋กœ๊ทธ์ธ ์‹œ ID/PW ๊ธฐ๋ฐ˜ ์ธ์ฆ ์ˆ˜ํ–‰
OncePerRequestFilter (JWT ์ปค์Šคํ…€ ํ•„ํ„ฐ)๋งค ์š”์ฒญ๋งˆ๋‹ค JWT ํ† ํฐ ํŒŒ์‹ฑ ๋ฐ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ฒ˜๋ฆฌ
ExceptionTranslationFilter์ธ์ฆ/์ธ๊ฐ€ ์‹คํŒจ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
FilterSecurityInterceptor๊ถŒํ•œ(์ธ๊ฐ€) ๊ฒ€์‚ฌ ์ˆ˜ํ–‰

๐Ÿงฉ JWT ์‚ฌ์šฉ ์‹œ ํ๋ฆ„ (์ปค์Šคํ…€ ์ธ์ฆ ํ•„ํ„ฐ ํฌํ•จ)

ํด๋ผ์ด์–ธํŠธ โ†’ ์š”์ฒญ
        โ†“
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์— ์ €์žฅํ•˜์—ฌ ์ดํ›„ ์ธ๊ฐ€ ์ฒ˜๋ฆฌ๊นŒ์ง€ ์—ฐ๋™๋˜๋„๋ก ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.โ€

profile
๊ธฐํš๊ณผ ์„ค๊ณ„ ๊ทธ๋ฆฌ๊ณ  ๊ตฌํ˜„๊นŒ์ง€ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค

0๊ฐœ์˜ ๋Œ“๊ธ€