我正在尝试在身份验证期间在WebFlux中引发自定义异常,并使用ControllerAdvice(@ExceptionHandler
)处理该异常。不幸的是,它不会传播,如果抛出异常,则返回HTTP 500;如果将异常返回为Mono.error(),则返回HTTP 401。
@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?
答案 0 :(得分:0)
UserDetailsService
(reactive和non-reactive)的工作是根据username
来检索用户。一无所有,一无所有。检查用户是否已启用委托给UserDetailsChecker
,后者会调用UserDetails
实现上的某些方法,并将相应地做出反应。不要在这里尝试做更多的事情,因为这不是UserDetailsService
的任务。
默认的UserDetails
,User
实现具有2个构造函数,一个具有3个构造函数,而一个具有7个参数。根据您的业务规则,使用第二个来正确填充enabled
,Spring Security将按需完成其余工作。