[스프링 시큐리티] 인증 상태 영속성

Welcome to Seoyun Dev Log·2024년 9월 21일
0

보안

목록 보기
2/18

SecurityContextRepository / SecurityContextHolderFilter

인증 요청

스프링 시큐리티가 인증 세션에 저장하는 행위를 자동으로 해준다
단, 커스텀한 인증 필터를 만들어서 하는 경우 직접 저장하는 코드를 구현해야한다.
그렇지 않으면 세션에 저장하지 않는다

인증 후 요청

세션에 저장한 사용자 인증 값을 가져와서 사용한다.
(null인지 null이 아닌지를 체크하여 판단한다)

  • 단 익명의 사용자의 경우는 다르게 처리해야한다.

SecurityContextRepository 구조

  • SecurityContextRepository는 3개의 구현체가 존재
    • DelegatingSecurityContextRepository이 실행되고 나서 HttpSessionSecurityContextRepository, RequestAttributeSecurityContextRepository의 각각 구현체를 호출하는 식으로 저장하고 참조한다.
  • RequestAttributeSecurityContextRepository의 경우 요청 객체에 저장하기 때문에 매요청마다 인증 당시의 요청 객체로 영속성을 유지할 수 없다. 세션에 저장되는 경우에는 매요청을 하여도 타임아웃이 만료되거나, 애플리케이션이 종료되지 않는 이상 세션에서 꺼내 사용할 수 있다.

각 시점마다 생성, 저장, 삭제 방법이 다르다

  • 익명 사용자의 경우 무조건 새로운 객체를 생성한다
  • 인증 요청의 경우에도 인증을 받지 못한 경우이기 때문에 새로운 객체를 생성해야하며 인증 상태를 유지하기 위해서 session에 저장한다.
  • 커스텀한 필터를 생성하는 경우에는 세션에 저장하는 코드를 직접 구현해야한다

필터 흐름도

  • 스프링 시큐리티의 Form login의 경우 아래와 같은 과정을 자동으로 해주지만, 인증 필터를 만들어서 구현하는 경우에는 기본적으로 해당 작업이 기본적으로 없다 따라서 인증 상태를 유지하기 위해서는 아래와 같은 과정을 구현해줘야한다.

  • SecurityContextPersistanceFilter 현재는 스프링 시큐리티가 지원하지만 해당 필터는 더이상 지원하지 않고 무조건 세션에 저장해주기 때문에 강제적이다. 따라서 SecurityContextHolderFilter를 사용하도록 권장하고 세션에 저장하기 위해서 따로 작업을 할 수 있도록 유연하게 변경되었다

사용방법

profile
하루 일지 보단 행동 고찰 과정에 대한 개발 블로그

0개의 댓글

관련 채용 정보