
Spring Security
- 스프링 기반의 애플리케이션 보안(인증,인가,권한)을 담당하는 스프링의 하위 프레임워크
- 필터 기반으로 동작
- 어노테이션 만으로 쉽게 설정가능
- CSRF, 세션고정공격을 방어하고 요청 헤더 또한 보안처리를 해준다. -> 개발자가 보안 관련 개발을 해야하는 부담이 사라짐
Authentication & Authorization
- 인증 (Authentication)
- 신원을 입증하는 과정, 로그인을 하면 누구인지 확인하는 과정
- 인가 (Authorization)
- 사이트 특정부분에 접근 권한이 있는지 확인

- SecurityContextPersistenceFilter부터 시작해서 아래로 내려가면 FilterSecurityInterceptor까지 순서대로 필터를 거친다.
- 필요할 때 특정 필터를 제거하거나 필터 뒤에 커스텀 필터를 넣는 설정들 또한 가는하다.
- UsernamePasswordAuthenticationFilter
- 아이디와 패스워드가 넘어오면 인증 요청을 위임하는 인증 관리자 역할
- FilterSecurityInterceptor
- 권한 부여 처리를 위임해 접근 제어 결정을 쉽게 하는 접근 결정 관리자 역할
- SecurityContextPersistenceeFilter
- SecurityContextRepository에서 SecurityContext를 가져오거나 저장하는 역할
- LogoutFilter
- 설정된 로그아웃 URL로 오는 요청을 확인해 해당 사용자 로그아웃 처리
- DefaultLoginPageGeneratingfilter
- 사용자가 로그인 페이지를 따로 지정하지 않았을 때 기본적ㅇ로 설정하는 로그인 페이지 관련 필터
- BasicAuthenticationFilter
- 요청 헤어데 있는 아이디와 패스워드를 파싱해서 인증 요청을 위임한다. 인증이 성공하면 AuthenticationSuccessHandler를, 실패하면 AutenticationFailureHandler를 실행
- RequestCacheAwareFilter
- 로그인 성겅 후 관련 있는 캐시 요청이 있는지 확인하고 캐시 요청 처리.
- SecurityContextHolderAwareRequestFilter
- HttpServletRequest 정보를 감싼다. 필터 체인 상의 다음 필터들에게 부가 정보를 제공되기 위해 사용
- AnonymousAuthenticationFilter
- 필터가 호출되는 시점까지 인증되지 않았다면 익명 사용자 전용 객체인 AnonymousAuthentication을 만들어 SecurityContext에 넣는다.
- SessionManagementFilter
- 인증된 사용자와 관련된 세션 관련 작업을 진행한다. 세션 변조 방지 전략을 설정하고, 유효하지 않은 세션에 대한 처리를 하고, 세션 생성 전략을 세우는 등의 작업을 처리한다.
- Exception TranslationFilter
- 요청을 처리하는 중에 발생할 수 있는 예외를 위임하거나 전달
- FilterSecurityInterceptor
- 접근 결정 관리자. AccessDecisionManager로 권한 부여 처리를 위임함으로써 접근 제어 결정을 쉽게 해준다. 이 과정에선 이미 사용자가 인증되어 있으므로 유요한 사용자인지도 판단이 된다. 즉 , 인가 관련 설정 가능
기본적 로그인 과정
- 사용자가 폼에 아이디와 패스워드 입력
- HTTPServletRequest에 아이디와 비밀번호 정보 전달. 이때 AuthenticationFilter가 넘어온 아이디와 비밀번호의 유효성 검사도 함.
- 유효성검사가 끝나면 실제 구현체인 UsernamePasswordAuthenticationToken을 만들어 넘겨준다.
- 전달받은 인증용 객체인 UsernamePasswordAuthenticationToken을 AuthenticationManager에게 보낸다.
- USernamePasswordAuthenticationToken을 AuthenticationProvider에 보낸다.
- 사용자 아이디를 UserDetailService에 보낸다. UserDetailService는 사용자 아이디로 찾은 사용자의 정보를 UserDetails객체로 만들어 AuthenticationProvider에게 전달한다.
- DB에 있는 사용자 정보를 가져온다.
- 입력 정보와 UserDetails의 정보를 비교해 실제 인증 처리를 한다.
- 이 후 인증 과정이 완료되면 SecurityContextHolder에 Authentication을 저장한다. 인증 성공 여부에 따라 성공하면 AuthenticationSuccessHandler를, 실패하면 AutenticationFailureHandler를 실행
'Frameworks > Spring' 카테고리의 다른 글
| [Spring] BeanDefinition (0) | 2025.04.11 |
|---|---|
| [Spring] 스프링 컨테이너 & 빈 (0) | 2025.04.11 |
| [Spring] Ioc,DI,Container (0) | 2025.04.11 |
| [Spring] 객체 지향 프로그래밍 (0) | 2025.04.11 |
| [Spring] Bean (0) | 2025.04.11 |