SpringSecurity 학습(18) -- SecurityContextPersistenceFilter

carlkim·2023년 10월 27일

스프링시큐리티학습

목록 보기
18/24
post-thumbnail

익명 사용자, 인증 시, 인증 후 가 나뉜다.

SecurityContextPersistenceFilter 는 익명사용자나 인증 사용자나 객체를 생성해서 저장하고 조회하는 역할을 담당한다.

  1. 익명 사용자
    로그인 하지 않은 상태로 요청을 하는 사용자
    1-1 익명사용자가 접근하면 새로운 SecurityContext객체를 생성하여 SecurityContextHolder에 저장 후 다음 필터로 이동
    1-2 AnonymousAuthenticationFilter 에서 AnonymousAuthenticationToken 객체를 SecurityContext에 저장
  2. 인증 시
    익명 사용자가 인증하면?
  • 새로운 SecurityContext 객체를 생성하여 SecurityContextHolder에 저장 후 다음 필터로 이동
  • UsernamePasswordAuthenticationFilter(폼로그인 담당) 에서 인증 성공 후 SecurityContext에 UsernamePassowrdAuthentication 객체를 SecurityContext에 저장
  • 인증이 최종 완료되면 Session 에 SecurityContext 를 저장
  1. 인증 후
    인증을 받았다
    -- 사용자가 접근하면 새로운 SecurityContext를 생성하지 않아
    -- Session에서 SecurityContext를 꺼내어 SecurityContextHolder에서 저장
    -- SecurityContext 안에 Authentication 객체가 존재하면 계속 인증을 유지한다

최종 응답 시 공통
-- SecurityContextHolder.clearContext()

SecurityContextPersistenceFilter 작동 흐름

  1. 사용자가 요청

  2. SecurityContextPersistenceFilter는 사용자 관계없이 요청마다 요청을 받는다

  3. SecurityContextPersistenceFilter필터는 HttpSecurityContextRepository 클래스를 가지고 있다 -- SecurityContext를 만들고 저장하는 클래스

  4. 인증전
    4-1 새로운 컨텍스트를 생성(세션에 인증정보 있는지 확인하지)
    [SecurityContextHolder.SecurityContext 정보는 null이지]
    4-2 인증필터 AuthFilter가 인증처리한다.
    4-3 인증이 완료되었다 SecurityContextHolder.SecurityContext.Authentication을 저장한다.(인증 객체를 저장한다)
    -- 인증시점에는 새로운 컨텍스트만 생성하고 다음 필터에 넘긴다.
    -- AuthFilter가 인증 후 인증 객체를 저장하는것이다.
    4-4 다음 필터로 이동하다가 Session에 SecurityContext를 저장한다.
    4-5 SecurityContext를 SecurityContextHolder에서 제거
    4-6 클라이언트에 응답

  5. 인증 후
    5-1 세션에서 SecurityContext가 있는지 확인한다. 있겠지.
    5-2 session에서 SecurityContext를 불러와서 SecurityContextHolder 안에 Securitycontext에 인증객체를 넣고 다음 필터로 넘어간다.

    요약

    SecurityContextPersistenceFilter
    1.인증을 받기 전
    1-1 새로운 SecurityContext를 생성
    1-2 SecurityContextHolder 안에 ThreadLocal이 있어.
    1-3 SecurityContext가 있는데 인증 받기 전이니까 null이겠지.

  6. 인증을 받은 후
    2-1 SecurityContextHolder 안에 ThreadLocal SecurityContext에 인증객체 저장
    2-2 인증 받은 후에는 session을부터 가져와서 인증객체를 SecurityContext에 저장한다.

profile
기본부터 가면 됩니다.

0개의 댓글