Spring SecurityContext в ответе асинхронного контроллера

#spring #spring-boot #spring-security #spring-restcontroller #security-context

#весна #весенняя загрузка #spring-безопасность #spring-restcontroller #безопасность-контекст

Вопрос:

Согласно WebAsyncManager документации,

Асинхронный сценарий начинается с обычной обработки запроса в потоке (T1). Параллельная обработка запросов может быть инициирована вызовом startCallableProcessing или startDeferredResultProcessing, оба из которых выдают результат в отдельном потоке (T2). Результат сохраняется, и запрос отправляется в контейнер, чтобы возобновить обработку с сохраненным результатом в третьем потоке (T3). В отправленном потоке (T3) доступ к сохраненному результату можно получить через getConcurrentResult() или определить его наличие с помощью hasConcurrentResult().

Spring SecurityContext доступен в T1 и T2, но не в T3. Мне нужен SecurityContext в T3 при сериализации ответа (это особое требование). Я могу исправить это, установив spring.security.filter.dispatcher-types=REQUEST,ERROR,ASYNC , но это приводит к тому, что весь мой FilterChain запуск дважды, чего я пытаюсь избежать.

Есть ли способ получить SecurityContext в T3 без повторного запуска FilterChain ?

Комментарии:

1. Не могли бы вы указать свой текущий код, конфигурацию и т.д.? без этого будет довольно сложно предоставить вам варианты

2. Вы читали baeldung.com/spring-mvc-async-security ?