如何在Spring WebFlux上自定义未经授权的响应

时间:2019-05-05 02:53:47

标签: spring spring-boot spring-security spring-webflux

我正在使用Spring Webflux启动一个新项目,但现在我不知道该如何处理401响应。

通常,我在@ExceptionHandler({ InvalidTokenException.class, AuthenticationException.class })上使用Tomcat在Spring Boot上进行处理。

这是我的财务总监建议:

    @ExceptionHandler({ InvalidTokenException.class, AuthenticationException.class })
    public ResponseEntity<Mono<ApiResponse>> handleError401(ServerHttpRequest request, Exception e)   {

        return new ResponseEntity<Mono<ApiResponse>>(
          Mono.just(
                  ApiResponse
                  .builder()
                  .success(false)
                  .code(ResponseType.AUTHENTICATION_ERROR.getCode())
                  .responseType(ResponseType.AUTHENTICATION_ERROR)
                  .message("login failed")
                  .build()
          ),
          HttpStatus.UNAUTHORIZED
        );
    }

编辑:

我也尝试过,但是没有抛出异常

    @ExceptionHandler({ Exception.class })
    public ResponseEntity<Mono<ApiResponse>> handleError401(ServerHttpRequest request, Exception e)   {

        return new ResponseEntity<Mono<ApiResponse>>(
          Mono.just(
                  ApiResponse
                  .builder()
                  .success(false)
                  .code(ResponseType.AUTHENTICATION_ERROR.getCode())
                  .responseType(ResponseType.AUTHENTICATION_ERROR)
                  .message("login failed")
                  .build()
          ),
          HttpStatus.UNAUTHORIZED
        );
    }

1 个答案:

答案 0 :(得分:0)

尝试将父项Exception.class暂时放在@ExceptionHandler中,以检查是否获得了预期的异常类型。有时,它会被包裹在其他类型的异常中,例如UndeclaredThrowableException