Spring Boot - какое событие произошло во время успешной авторизации Oauth2 - PullRequest
0 голосов
/ 23 января 2020

У меня есть приложение весенней загрузки, которое использует oauth2 для аутентификации. Я хочу добавить к этому прослушиватель событий и выполнить некоторые пользовательские действия. Я не могу понять, какое событие было запущено во время успешного завершения аутентификации в oauth2. Это AuthenticationSuccessEvent?

1 Ответ

1 голос
/ 23 января 2020

Событие, сработавшее при успешной авторизации OAuth2, равно AuthorizedEvent. Это срабатывает в коде Spring здесь . Но чтобы получить это событие, вам нужно установить publishAuthorizationSuccess на true. Чтобы это работало, можно сделать следующее:

Изменения конфигурации:

@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

....
    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        http
        .authorizeRequests()
        .withObjectPostProcessor(new ObjectPostProcessor<FilterSecurityInterceptor>() {
            public <O extends FilterSecurityInterceptor> O postProcess(O fsi) {
                fsi.setPublishAuthorizationSuccess(true);
                return fsi;
            }
        })
    }
....
}

Прослушиватели кода:

@Component
@Slf4j
public class HttpSessionEventListener {

    @EventListener(value = {AbstractAuthorizationEvent.class})
    public void onApplicationEvent(ApplicationEvent event) {
        if (event instanceof AuthenticationSuccessEvent) {
            Authentication auth = ((AuthenticationSuccessEvent) event).getAuthentication();
            if (auth.getPrincipal() instanceof UserCredential) {
                log.debug("Login success with AuthenticationSuccessEvent");
            }
        } else if (event instanceof InteractiveAuthenticationSuccessEvent) {
            Authentication auth =  ((InteractiveAuthenticationSuccessEvent)event).getAuthentication();
            log.debug("Login success with InteractiveAuthenticationSuccessEvent");
        } else if (event instanceof AbstractAuthenticationFailureEvent) {
            Authentication auth = ((AbstractAuthenticationFailureEvent) event).getAuthentication();
            log.debug("Login failed with AbstractAuthenticationFailureEvent");
        } else if (event instanceof AuthorizedEvent) {
            Authentication auth =  ((AuthorizedEvent)event).getAuthentication();
            log.debug("Login success with AuthorizedEvent");
        } else if (event instanceof AuthorizationFailureEvent) {
            Authentication auth =  ((AuthorizationFailureEvent)event).getAuthentication();
            log.debug("Login success with AuthorizationFailureEvent");
        }
    }
}
...