Бросьте и обработайте пользовательское исключение во время аутентификации Spring Security + WebFlux - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь создать пользовательское исключение в WebFlux во время аутентификации и обработать его с помощью ControllerAdvice (@ExceptionHandler). К сожалению, он не распространяется, я получаю либо HTTP 500, если я выбрасываю исключение, либо HTTP 401, если я возвращаю исключение как Mono.error ()

@Override //in authentication service
public Mono<UserDetails> findByUsername(String username) {
    //find user by username from database, 
    //if not enabled, throw a custom exception, 
    //if doesn't exist, throw UsernameNotFoundException, 
    //return org.springframework.security.core.userdetails.User otherwise.
}

@ExceptionHandler //in controller advice
public Mono<HttpStatus> handleException(MyCustomExceptionThrownFromFindByUsername ex) {
    //implemented
}

Есть ли способ помочь исключению попасть в ExceptionHandler?

1 Ответ

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

UserDetailsService (оба реактивный и не реактивный ) выполняет задание по извлечению пользователя на основе username. Не больше, не меньше. Проверка, включен ли пользователь, делегирована UserDetailsChecker, которая вызывает некоторые методы в реализации UserDetails и будет реагировать соответствующим образом. Не пытайтесь делать больше здесь, так как это не является задачей UserDetailsService.

Стандартная реализация UserDetails, User имеет 2 конструктора, один с 3 и один с 7 параметрами. Воспользуйтесь вторым, чтобы правильно заполнить enabled в соответствии с вашими бизнес-правилами, а Spring Security сделает все остальное, как и должно.

...