Как вызвать пользовательский код после успешной аутентификации Spring Security OAuth2 - PullRequest
0 голосов
/ 09 ноября 2018

Я создал сервер ресурсов OAuth2, который принимает и проверяет токены JWT и извлекает информацию о пользователях из заявок для определения информации о пользователе, такой как имя пользователя и права доступа. В основном я сделал это с помощью библиотеки spring-security-oauth2-autoconfigure .

После аутентификации пользователя я бы хотел вызвать пользовательский код, который помещает сообщение в поток Kafka, чтобы указать, что пользователь вошел в систему. Где наиболее подходящее место для этого?

Я мог бы сделать это в OAuth2AuthenticationManager.authenticate, но мне пришлось бы расширить этот класс и переопределить этот метод, а затем подключить его. Похоже, в Spring уже должно быть что-то для этого.

1 Ответ

0 голосов
/ 09 ноября 2018

OAuth2AuthenticationProcessingFilter, который вызывает метод authenticate, упомянутый в вопросе, имеет член с именем eventPublisher. Его методы включают publishAuthenticationSuccess, который вызывается после успешной аутентификации.

Чтобы привязать к этому пользовательский код, создайте прослушиватель событий, который Spring выберет в качестве компонента. Примерно так:

@Component 
public class MyAuthenticationEventListener implements ApplicationListener<AuthenticationSuccessEvent> {

    private static final Logger logger = LoggerFactory.getLogger(MyAuthenticationEventListener.class);

    @Override
    public void onApplicationEvent(AuthenticationSuccessEvent authenticationSuccessEvent) {
        logger.info("User logged in: " + authenticationSuccessEvent.getAuthentication().getName());
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...