У меня есть компонент, помеченный @KafkaListener
, и внутри этого компонента я планирую получить учетные данные вошедшего в систему пользователя через 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());
}
}