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

Posted

技术标签:

【中文标题】如何在 Spring WebFlux 上自定义未经授权的响应【英文标题】:How to customize an unauthorized response on Spring WebFlux 【发布时间】:2019-09-23 02:24:58 【问题描述】:

我正在使用 Spring Webflux 开始一个新项目,但现在我无法弄清楚如何处理 401 响应。

通常我通过 @ExceptionHandler( InvalidTokenException.class, AuthenticationException.class ) 在 Spring Boot 上使用 Tomcat 处理它。

这是我的控制器建议:

    @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】:

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

【讨论】:

我已经进行了更改,但我没有成功...没有抛出异常。我会继续寻找解决方案。问候!

以上是关于如何在 Spring WebFlux 上自定义未经授权的响应的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Security Grails 上自定义 /login/authenticate?

JAVA-Spring注解实现AOP权限拦截,如何取得方法上自定义Annotation的值呢?

spring5 webflux,如何返回自定义json数据?

如何在 Spring Boot 和 Spring WebFlux 中使用“功能 bean 定义 Kotlin DSL”?

如何在 Spring Webflux 中自定义 Oauth2 的登录页面?

Spring Reactive WebFlux - 如何自定义 BadRequest 错误消息