在身份验证期间抛出并处理自定义异常Spring Security + WebFlux

时间:2019-01-10 09:53:47

标签: java spring spring-security spring-webflux

我正在尝试在身份验证期间在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?

1 个答案:

答案 0 :(得分:0)

UserDetailsServicereactivenon-reactive)的工作是根据username来检索用户。一无所有,一无所有。检查用户是否已启用委托给UserDetailsChecker,后者会调用UserDetails实现上的某些方法,并将相应地做出反应。不要在这里尝试做更多的事情,因为这不是UserDetailsService的任务。

默认的UserDetailsUser实现具有2个构造函数,一个具有3个构造函数,而一个具有7个参数。根据您的业务规则,使用第二个来正确填充enabled,Spring Security将按需完成其余工作。