我有一个用@KafkaListener
注释的bean,并且在此bean中,我计划通过SecurityContextHolder
获取登录的用户凭据。
但是,SecurityContextHolder.getContext().getAuthentication()
给了我一个null
对象,可能是因为它在另一个thread
中运行。
在这种情况下,是否可以将SecurityContext
从ThreadLocal
传播到另一个线程?可以在我的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());
}
}
答案 0 :(得分:0)
例如,SecurityContext的身份验证代表调用了Web服务的用户,网站的页面...等等...
当您收听kafka消息时,应使用哪个用户的上下文? 我认为您的尝试并没有真正意义。