본문 바로가기
Frameworks/Spring

[Spring] Spring Security

by junseokoo 2025. 4. 11.

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로 권한 부여 처리를 위임함으로써 접근 제어 결정을 쉽게 해준다. 이 과정에선 이미 사용자가 인증되어 있으므로 유요한 사용자인지도 판단이 된다. 즉 , 인가 관련 설정 가능

기본적 로그인 과정

  1. 사용자가 폼에 아이디와 패스워드 입력
  2. HTTPServletRequest에 아이디와 비밀번호 정보 전달. 이때 AuthenticationFilter가 넘어온 아이디와 비밀번호의 유효성 검사도 함.
  3. 유효성검사가 끝나면 실제 구현체인 UsernamePasswordAuthenticationToken을 만들어 넘겨준다.
  4. 전달받은 인증용 객체인 UsernamePasswordAuthenticationToken을 AuthenticationManager에게 보낸다.
  5. USernamePasswordAuthenticationToken을 AuthenticationProvider에 보낸다.
  6. 사용자 아이디를 UserDetailService에 보낸다. UserDetailService는 사용자 아이디로 찾은 사용자의 정보를 UserDetails객체로 만들어 AuthenticationProvider에게 전달한다.
  7. DB에 있는 사용자 정보를 가져온다.
  8. 입력 정보와 UserDetails의 정보를 비교해 실제 인증 처리를 한다.
  9. 이 후 인증 과정이 완료되면 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