Spring/Spring Security

Spring Security (5) - SecurityContextPersistenceFilter

SecurityContextPersistenceFilter 는 HttpRequest 와 HttpResponse 를 wrapping 한 HttpRequestResponseHolder 를 SecurityContextRepository 에게 전달하여 SecurityContext 를 반환받습니다.

  • 접속정보가 없으면 SecurityContext 를 새로 생성합니다.

  • 접속정보가 있으면 SecurityContextRepository 로부터 SecurityContext 를 가져옵니다.

    • 저장 장소는 기본적으로 HttpSessionSecurityRepository 이며, 이 클래스는 HttpSession 에 SecurityContext 를 저장합니다.
  • HttpSessionSecurityRepository 의 loadContext 는 session 으로부터 SecurityContext 를 읽어옵니다.

 

  • 로그인전이라면 HttpSession 에 정보가 없으니 빈 SecurityContext 를 생성해줍니다.
  • 인증 절차를 마친 후에 SecurityContext 를 삭제하고, SecurityContextRepository 에 SecurityContext 를 저장합니다.
    • ThreadLocal 을 이용하여 SecurityContext 를 공유하고, thread pool 을 이용해 쓰레드를 재사용하기 때문에 삭제를 해주지 않으면 다른 사용자의 정보가 들어있을지도 모릅니다.