일단 Callable 만 적용되는거 확인.
비동기로 처리되는 작업에 대해 알맞은 시큐리티 컨텍스트(세션)을 적용
Callable로 서블릿 단에서 비동기 작업을 수행할 때 서블릿 입출력 쓰레드와 작업 쓰레드가 동일한 Security ContextHolder의 SecurityContext 영역을 참조할 수 있도록 도와준다.
( SecurityContextHolder - TreadLocal )
입출력 쓰레드 - 사용자의 입력만 받고 응답만 처리.
작업 쓰레드 - 입출력 쓰레드를 통해 입력을 받고 실제로 작업만 함.
즉, SecurityContextHolder의 ThreadLocal 전략에 따라 동일한 쓰레드에서만 SecurityContext에 접근 할 수 있는데, 비동기 방식의 경우 하나의 작업을 2개의 쓰레드로 수행하기 때문에 이 부분을 보완하기 위해 필터가 존재한다.
커스텀 SecurityFilterChain을 생성해도 등록된다.
각기 다른 쓰레드에서 수행하지만 ThreadLocal로 관리되는 SecurityContextHolder의 값은 WebAsyncManagerIntegrationFilter와 여타 클래스들을 통해 동일하게 가져올 수 있다.