Распространение контекста безопасности загрузки Spring в bean-компонент, аннотированный @KafkaListener - PullRequest
0 голосов
/ 23 января 2019

У меня есть компонент, помеченный @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());
 }
}

1 Ответ

0 голосов
/ 23 января 2019

Аутентификация SecurityContext представляет, например, пользователя, который вызвал веб-сервис, страницу веб-сайта ... и т. Д.

Когда вы слушаете сообщение Кафки, какой пользователь должен использовать контекст? Я не думаю, что то, что вы пытаетесь сделать, действительно имеет смысл.

...