将Spring引导安全性上下文传播到带有@KafkaListener注释的Bean中

时间:2019-01-23 14:13:37

标签: spring spring-boot spring-security spring-kafka

我有一个用@KafkaListener注释的bean,并且在此bean中,我计划通过SecurityContextHolder获取登录的用户凭据。

但是,SecurityContextHolder.getContext().getAuthentication()给了我一个null对象,可能是因为它在另一个thread中运行。

在这种情况下,是否可以将SecurityContextThreadLocal传播到另一个线程?可以在我的Spring Boot配置中轻松完成吗?

下面是示例代码:

@Component
@Slf4j
public class MessageConsumer {

private final MessageService messageService;

@Autowired
public MessageConsumer(final MessageService service) {
    messageService = service;
}

@KafkaListener(topics = "myTopic")
public void receive(final List<Message> message) {
    messageService.consumerAnStoreMessage(message, SecurityContextHolder.getContext().getAuthentication());
 }
}

1 个答案:

答案 0 :(得分:0)

例如,SecurityContext的身份验证代表调用了Web服务的用户,网站的页面...等等...

当您收听kafka消息时,应使用哪个用户的上下文? 我认为您的尝试并没有真正意义。