Spring Security란?
Spring 애플리케이션의 인증(Authentication)과 인가(Authorization)를 담당하는 보안 프레임 워크
핵심 개념
1.인증(Authentication)
- "얘 누구냐?"- 사용자가 본인이 맞는지 확인
- ex: 로그인(username+password 검증)
2.인가(Authorization)
- "얘 이거 할 수 있어?"- 인증된 사용자가 특정 자원에 접근할 권한이 있는지 확인
- ex: ADMIN만 회원 삭제 가능
핵심 구성 요소
1. SecurityFilterChain
- 모든 HTTP 요청이 거치는 필터들의 체인
- 요청이 Controller에 도달하기 전에 보안 검사
- 개발자가 설정하는 부분: 어떤 URL은 허용, 어떤 URL은 인증 필요
요청 → Filter1 → Filter2 → Filter3 → ... → Controller
2. Authentication(인증 객체)
- 현재 로그인한 사용자 정보를 담는 Interface
- username, password, 권한(roles)등 포함
UsernamePasswordAuthenticationToken(가장 많이 씀)
AnonymousAuthenticationToken
- 등등 구현체가 있다
3. SecurityContext/SecurityContextHolder
SecurityContext: 현재 인증된 사용자 정보를 저장하는 Interface
SecurityContextHolder: SecurityContext를 관리하는 유틸리티
- 애플리케이션 어디서든
SecurityContextHolder.getContext().getAuthentication()으로 현재 사용자 정보 조회 가능
- 스레드별로 독립적으로 관리됨
4. UserDetailsService
- 이 username을 가진 사용자 정보를 어떻게 가져올지를 정의하는 인터페이스
- 보통 DB에서 사용자 조회하는 로직 구현
loadUserByUsername(String username)메소드 구현
5. PasswordEncoder
- 비밀번호 암호화/검증 담당
- 평문 비밀번호를 암호화하거나, 입력된 비밀번호가 맞는지 검증
- 보통
BCryptPasswordEncoer사용