πŸŒ€ Spring Security κ΄€λ ¨ μ˜ˆμ™Έ 처리

λ ˆμ΄μ–΄ λ‹¨μœ„λ‘œ λͺ¨λ“ˆν™”ν•΄λ³Έ ν”„λ‘œμ νŠΈμ—μ„œ 이전에 λ§Œλ“€μ–΄λ΄€λ˜ κΈ€λ‘œλ²Œ μ‘λ‹΅μ²˜λ¦¬ κ΄€λ ¨ μ½”λ“œλ₯Ό μ μš©ν–ˆλŠ”λ°, μƒˆλ‘œμš΄ 문제λ₯Ό λ°œκ²¬ν–ˆλ‹€.

common λͺ¨λ“ˆμ— μ‘λ‹΅μ²˜λ¦¬ μ½”λ“œλ₯Ό λͺ°μ•„λ„£μ—ˆλŠ”λ°, μ˜μ‘΄μ„± import 문제 λ•Œλ¬Έμ— securityμ—μ„œ μž‘μ•„μ€„ 클래슀(BadCredentialsException)κ°€ 인식이 μ•ˆλ˜λŠ” λ¬Έμ œμ˜€λ‹€.

μƒκ°ν•΄λ³΄λ‹ˆ GlobalExceptionHandlerλŠ” @RestControllerAdvice λ₯Ό μ‚¬μš©ν•΄μ„œ λ°œμƒ μ΅μ…‰μ…˜μ„ μΊμΉ˜ν•΄μ£ΌλŠ”λ° μ‹œνλ¦¬ν‹° λ°œμƒ μ—λŸ¬λŠ” ν•„ν„° λ‹¨μ—μ„œ 작히기 λ•Œλ¬Έμ— @ExceptionHandlerμ—λŠ” μ•ˆμž‘νžˆλŠ”κ²Œ λ§žμ§€ μ•ŠλŠ”κ°€ ν•˜λŠ” 생각이 λ²ˆλœ©μ˜€λ‹€.

μ•Œμ•„λ³΄μž


πŸ™ 문제

πŸ” μ™œ 이런 일이?

 μš”μ²­
   ↓
[Security Filter Chain]  // μ—¬κΈ°μ„œ μ‹œνλ¦¬ν‹° μ˜ˆμ™Έ λ°œμƒ (BadCredentialsException 같은 μ• λ“€)
   ↓
DispatcherServlet
   ↓
Controller
   ↓
@ExceptionHandler or @ControllerAdvice

μ„œλΈ”λ¦Ώ λ””μŠ€νŒ¨μ²˜λ³΄λ‹€ μ•žλ‹¨μ— μœ„μΉ˜ν•œ 필터에 μ˜ν•΄ @ExceptionHandler or @ControllerAdvice에 λ„λ‹¬ν•˜μ§€ μ•ŠλŠ”λ‹€.

βœ… μš”μ•½

@Controller λ‚΄λΆ€μ—μ„œ λ°œμƒν•˜λŠ” μ˜ˆμ™ΈλŠ” @RestControllerAdvice 에 μ˜ν•΄ μž‘νžˆμ§€λ§Œ,

BadCredentialsException, UsernameNotFoundException, AccessDeniedException 이런 애듀은 Spring Security Filter μ•ˆμ—μ„œ λ°œμƒν•˜κΈ° λ•Œλ¬Έμ— μ˜ˆμ™Έκ°€ ν„°μ§„ μ‹œμ μ— μ»¨νŠΈλ‘€λŸ¬κ°€ 아직 호좜되기 μ „μ΄λ‹ˆ @ExceptionHandler둜 λͺ»μž‘λŠ”λ‹€


πŸ§™πŸ»β€β™‚οΈ μ ‘κ·Ό 아이디어

Spring Security κ΄€λ ¨ μ˜ˆμ™Έ νŠΉλ³„νžˆ μ»€μŠ€ν…€ν•΄μ„œ μ²˜λ¦¬ν•˜λ©΄

μ»€μŠ€ν…€ν•œ ν•Έλ“€λŸ¬λ“€μ„ securityConfig 에 λ“±λ‘ν•΄μ„œ, ν•„ν„°μ—μ„œ 걸릴 λ•Œ μ›ν•˜λŠ” ν˜•μ‹μœΌλ‘œ μž‘μ•„μ€˜λ³Ό 수 μžˆκ² λ‹€λŠ” 아이디어

단, μ–˜λ‚΄λŠ” νŠΉλ³„νžˆ νšŒμ› 도메인이 μ‘΄μž¬ν•˜λŠ” module-api μͺ½μ— 배치