Я пытаюсь получить весенний контекст безопасности для распространения через поток сообщений async для интеграции Spring, но обнаружил, что хотя я добавил SecurityContextPropagationChannelInterceptor
, контекст безопасности всегда заканчивается нулевым значением мой обработчик сообщений.Как распространять Spring Security Context в Spring Интеграция async messaging gateway
@Bean
@GlobalChannelInterceptor(patterns = {"*"})
public ChannelInterceptor securityContextPropagationInterceptor()
{
return new SecurityContextPropagationChannelInterceptor();
}
Я посвящаю мой поток от службы, которая имеет населенное контекст безопасности, сделав вызов на мой интерфейс шлюза:
@MessagingGateway
public interface AssignmentsService
{
@Gateway(requestChannel = "applyAssignmentsFlow.input")
ListenableFuture<AssignmentResult> applyAssignments(AssignmentRequest assignmentRequest);
}
На дальнейшей отладке я обнаружил, что GatewayProxyFactoryBean
создает новый поток, когда инициируя мой поток, но не распространяя контекст безопасности.
Я искал, но не смог выяснить, как настроить это для распространения контекста безопасности.
Привет! Это почти сработало, за исключением того, что я обнаружил, что мне пришлось подклассифицировать «DelegatingSecurityContextAsyncTaskExecutor», поскольку он не реализовал интерфейс AsyncListenableTaskExecutor. Должен ли я поднять запрос на изменение командой Spring Security, чтобы изменить ее для реализации «AsyncListenableTaskExecutor»? –
Да, пожалуйста: https://github.com/spring-projects/spring-security/issues. –