spring - 将 Spring 引导安全上下文传播到使用 @KafkaListener 注释的 bean 中
问题描述
我有一个用@KafkaListener
这个 bean 注释的 bean,我打算通过SecurityContextHolder
.
但是,SecurityContextHolder.getContext().getAuthentication()
给我一个null
对象可能是因为它在不同的thread
.
在这种情况下,有没有办法将SecurityContext
from传播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());
}
}
解决方案
SecurityContext 的身份验证表示,例如,调用 Web 服务的用户、网站的页面......等等......
当您收听 kafka 消息时,应该使用哪个用户的上下文?我不认为你正在尝试做的事情真的有意义。
推荐阅读
- windows - 在 Windows 的临时文件夹中隐藏 exe 的执行
- docker - 如何使用 curl 列出活动的 docker 容器?
- python - 音频文件未在 pygame 中打开
- angular - 在Angular中绑定两个子组件的输入和输出的最佳方法
- java - 如何序列化/反序列化整数列表?这个库可以用 Quirk 做到这一点吗?
- mongoose - 在 Mongoose 中查找一个嵌入文档
- spring-boot - Grails 4:独立端口
- fluentui-react - Microsoft Fluent UI Northstar 中的断点
- pine-script - 扩展绘图功能
- java - 使用 java、spring boot、h2 登录会话。如何实施?