Spring security 如何在Spring集成异步消息网关中传播Spring安全上下文
我试图让spring安全上下文通过spring integration异步消息流传播,但发现即使我添加了Spring security 如何在Spring集成异步消息网关中传播Spring安全上下文,spring-security,spring-integration,Spring Security,Spring Integration,我试图让spring安全上下文通过spring integration异步消息流传播,但发现即使我添加了SecurityContextPropagationChannelInterceptor,安全上下文在我的消息处理程序中始终为空 @Bean @GlobalChannelInterceptor(patterns = {"*"}) public ChannelInterceptor securityContextPropagationInterceptor() { return new
SecurityContextPropagationChannelInterceptor
,安全上下文在我的消息处理程序中始终为空
@Bean
@GlobalChannelInterceptor(patterns = {"*"})
public ChannelInterceptor securityContextPropagationInterceptor()
{
return new SecurityContextPropagationChannelInterceptor();
}
我通过调用我的网关接口,从具有填充的安全上下文的服务启动流:
@MessagingGateway
public interface AssignmentsService
{
@Gateway(requestChannel = "applyAssignmentsFlow.input")
ListenableFuture<AssignmentResult> applyAssignments( AssignmentRequest assignmentRequest );
}
@MessagingGateway
公共接口分配服务
{
@网关(requestChannel=“applyAssignmentsFlow.input”)
可列出的未来应用程序签名(AssignmentRequest AssignmentRequest);
}
在进一步调试时,我发现GatewayProxyFactoryBean
在启动我的流时创建了一个新线程,但没有传播安全上下文
我已经搜索过了,但无法找到如何配置它来传播安全上下文。这是一项非常有趣的任务。真的:) 但无论如何,你可以这样做:
@Bean
public AsyncTaskExecutor securityContextExecutor() {
return new DelegatingSecurityContextAsyncTaskExecutor(new SimpleAsyncTaskExecutor());
}
...
@MessagingGateway(asyncExecutor = "securityContextExecutor")
public interface AssignmentsService
这里的主要技巧来自Spring安全性及其并发性,我们应该使用TaskExecutor
wrappers来获取当前的SecurityContext
,并将其传播到新生成的线程中
不过,Spring集成并没有什么意义,它只是处理安全性的正确方法
很快就会在参考手册中加入这样的技巧
关于此事的请求:Hi!这几乎奏效了,但我发现我必须为DelegatingSecurityContextAsyncTaskExecutor创建子类,因为它没有实现AsyncListenableTaskExecutor接口。我是否应该向Spring安全团队提出更改请求,以将其更改为实现
AsyncListenableTaskExecutor
?是的,请:。