일단 Callable 만 적용되는거 확인.

비동기로 처리되는 작업에 대해 알맞은 시큐리티 컨텍스트(세션)을 적용

Callable로 서블릿 단에서 비동기 작업을 수행할 때 서블릿 입출력 쓰레드와 작업 쓰레드가 동일한 Security ContextHolder의 SecurityContext 영역을 참조할 수 있도록 도와준다.

( SecurityContextHolder - TreadLocal )

입출력 쓰레드 - 사용자의 입력만 받고 응답만 처리.

작업 쓰레드 - 입출력 쓰레드를 통해 입력을 받고 실제로 작업만 함.

즉, SecurityContextHolder의 ThreadLocal 전략에 따라 동일한 쓰레드에서만 SecurityContext에 접근 할 수 있는데, 비동기 방식의 경우 하나의 작업을 2개의 쓰레드로 수행하기 때문에 이 부분을 보완하기 위해 필터가 존재한다.

커스텀 SecurityFilterChain을 생성해도 등록된다.


각기 다른 쓰레드에서 수행하지만 ThreadLocal로 관리되는 SecurityContextHolder의 값은 WebAsyncManagerIntegrationFilter와 여타 클래스들을 통해 동일하게 가져올 수 있다.