inblog logo
|
An's Blog
    JAVA

    [JAVA] 65. Spring Security의 인증 방식

    윤설안's avatar
    윤설안
    Jul 25, 2025
    [JAVA] 65. Spring Security의 인증 방식
    Contents
    SFC(Spring Security Filter Chain)는 어떻게 인증하는가?Session이 있다고 해서 인증된 게 아님보안 전용 박스의 이름은 SecurityContextSecurityContextHolder란?인증된 사용자 정보는 Authentication에 담긴다우리가 직접 Authentication을 만들어 저장할 수도 있다
    Spring Security가 어떤 방식으로 인증을 하며 Session에 어떻게 저장하는지 설명

    SFC(Spring Security Filter Chain)는 어떻게 인증하는가?

    • 사용자가 요청을 보낼 때, Spring Security는 수십 개의 필터 체인(SFC) 을 순차적으로 실행함
    • 이 필터들은 인증(Authentication), 권한 검사(Authorization), 세션 유지 등 보안 관련 로직을 담당함
    • 이 모든 필터를 통과해야만 실제 컨트롤러(DispatcherServlet)에 도달할 수 있음

    Session이 있다고 해서 인증된 게 아님

    • 흔히 “Session 이 있으니까 로그인된 거 아냐?”라고 생각하지만
      • → Spring Security는 세션 자체를 보지 않음
    • Spring Security가 인증 여부를 판단하는 기준은:
      • Session 안에 SecurityContext 라는 "보안 전용 박스"가 존재하는가?

    보안 전용 박스의 이름은 SecurityContext

    • Spring Security는 SecurityContext 를 SecurityContextHolder에 저장함
    • SecurityContextHolder는 ThreadLocal 기반 전역 저장소로,
      • 요청마다 사용자 인증 정보를 유지시켜줌

    SecurityContextHolder란?

    • 보안 전용 박스를 모아두는 공간이라고 보면 된다.
    • SecurityContextHolder는 Spring Security에서 인증 정보를 저장하는 핵심 클래스다.
    • 내부적으로 현재 스레드에 바인딩된 인증(SecurityContext) 정보를 보관하고 있음.
    • 쉽게 말하면,
      • "이 요청을 보낸 사용자는 누구인지?"를 기억하는 저장소

    인증된 사용자 정보는 Authentication에 담긴다

    SecurityContext 안에는 Authentication 객체가 존재함.
    이게 바로 Spring Security가 사용하는 "로그인 인증 정보" 다.
    Authentication { Object principal; // 로그인한 사용자 정보 (예: UserDetails 구현체) Object credentials; // 비밀번호 (성공 후엔 null 처리됨) Collection<? extends GrantedAuthority> authorities; // 권한 목록 boolean authenticated; // 인증 완료 여부 (true면 인증됨) }

    우리가 직접 Authentication을 만들어 저장할 수도 있다

    Spring Security는 기본적으로 로그인 성공 시 Authentication을 만들어 저장하지만,
    우리가 직접 만들어서 넣을 수도 있음
    Authentication auth = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities()); SecurityContextHolder.getContext().setAuthentication(auth);
    • 이 방식은 소셜 로그인(OAuth) 또는 자동 로그인 처리 시 자주 사용됨
    • 이 코드가 실행되면 Spring Security는 “이미 인증된 사용자”로 인식함
    Share article
    Contents
    SFC(Spring Security Filter Chain)는 어떻게 인증하는가?Session이 있다고 해서 인증된 게 아님보안 전용 박스의 이름은 SecurityContextSecurityContextHolder란?인증된 사용자 정보는 Authentication에 담긴다우리가 직접 Authentication을 만들어 저장할 수도 있다

    An's Blog

    RSS·Powered by Inblog