본문 바로가기
  • Coding & Book
Back-End/Springboot

Spring Security 필터 기반 인증 처리 방식

by 루이3 2025. 2. 17.

인증에 사용되는 API

사용자의 인증 과정에서 사용되는 스프링 시큐리티의 내부 클래스들은 역할에 따라

크게 2가지로(인증 처리 담당, 인증된 사용자 정보 생성 및 관리 담당) 구분할 수 있습니다.

 

인증 처리 담당

    1. AuthenticationFilters:
      • 역할: 요청에 대한 인증 처리를 수행하는 필터들입니다. UsernamePasswordAuthenticationFilter, BasicAuthenticationFilter 등이 여기에 해당합니다.
      • 작동 방식: 사용자로부터 제공된 인증 정보(예: 사용자 이름과 비밀번호)를 수집하고 이를 기반으로 인증을 시도합니다.
    2. ExceptionTranslationFilter:
      • 역할: 인증 과정에서 발생할 수 있는 예외를 처리하고, 적절한 오류 페이지로 리다이렉트 하는 등의 작업을 수행합니다.
      • 작동 방식: 예외가 발생하면 이를 캡처하여 인증 실패 등의 상황에 적절히 대응합니다.
    3. AuthenticationProvider:
      • 역할: 인증 정보를 실제로 검증하고, 인증된 사용자를 생성합니다. DaoAuthenticationProvider와 같은 구현체가 여기에 해당합니다.
      • 작동 방식: Authentication 객체를 입력으로 받아 인증을 수행하고, 인증이 성공하면 Authentication 객체를 반환합니다.
    4. SecurityContextPersistenceFilter:
      • 역할: SecurityContextHolder에 저장된 SecurityContext를 요청 간 유지하는 역할을 수행합니다.
      • 동 방식: 기존 요청에서 저장된 인증 정보를 유지하고, 요청이 끝날 때 SecurityContext를 정리합니다.
    5. RememberMeAuthenticationFilter :
      • 역할: Remember-Me 기능을 제공하여 사용자가 로그인 정보를 유지할 수 있도록 합니다.
      • 작동 방식: 쿠키 기반 인증을 수행하며, 사용자가 인증을 다시 하지 않아도 되도록 처리합니다.

인증된 사용자 정보 생성 및 관리 담당

  1. SecurityContextHolder:
    • 역할: 현재의 보안 컨텍스트를 보관하고 제공하는 클래스입니다. 현재 인증된 사용자의 정보를 저장하고 접근할 수 있게 합니다.
    • 작동 방식: SecurityContext 객체를 스레드 로컬에 저장하여 현재 스레드에서 접근 가능하게 합니다.
  2. Authentication:
    • 역할: 사용자 인증 정보를 나타내는 인터페이스입니다. 인증된 사용자의 정보와 인증 상태를 포함합니다.
    • 작동 방식: 사용자 이름, 권한, 인증된 여부 등의 정보를 담고 있으며, SecurityContextHolder를 통해 접근할 수 있습니다.
  3. UserDetails:
    • 역할: 인증된 사용자의 세부 정보를 담는 인터페이스입니다. 사용자 이름, 비밀번호, 권한 등을 포함합니다.
    • 작동 방식: 스프링 시큐리티는 이 인터페이스를 사용하여 사용자 정보를 관리하고, 인증 과정에서 이를 참조합니다.
  4. UserDetailsService:
    • 역할: UserDetails 객체를 반환하는 서비스 인터페이스입니다. 사용자 이름을 기반으로 UserDetails 객체를 로드합니다.
    • 작동 방식: 사용자 이름을 입력으로 받아, 데이터베이스 등에서 사용자 정보를 조회하여 UserDetails 객체를 반환합니다.
  5. UserDetailsManager:
    • 역할: UserDetails 객체를 관리하는 인터페이스입니다. 사용자의 추가, 삭제, 업데이트 작업을 처리합니다.
    • 작동 방식: UserDetailsService와 유사하지만, 사용자 정보를 수정하거나 삭제하는 기능도 포함됩니다.

 

필터 기반의 인증 처리 흐름

사용자가 요청을 보냄 → Servlet FilterChain을 거쳐 SecurityFilterChain에서 인증 수행 → DispatcherServlet이 컨트롤러에 요청 전달 → 비즈니스 로직을 수행하고 DB에서 데이터를 조회 → 최종적으로 응답이 브라우저로 반환

 

 

 

정리해보면..

Spring Security는 강력한 인증 및 권한 관리를 제공하며
요청이 필터 체인을 거쳐 보안 검사를 수행하는 방식으로 동작합니다.

  • Servlet FilterChain을 통해 요청을 가로채고 보안 필터를 거쳐 인증을 수행합니다.
  • SecurityContextHolder를 통해 인증 정보를 유지하며, 이후 요청에서도 동일한 사용자의 상태를 보장합니다.
  • UserDetailsService를 이용해 사용자 정보를 관리하고, 필요시 DB에서 불러옵니다.

이와 같은 구조 덕분에 Spring Security는 확장성과 보안성을 보장하면서도 유연한 인증 및 권한 관리를 지원한다고 합니다.