相关疑难解决方法(0)

Spring Security Oauth - OAuth2Exceptions 的自定义格式

spring security oauth 的错误格式符合 OAuth 规范,看起来像这样。

{
  "error":"insufficient_scope",
  "error_description":"Insufficient scope for this resource",
  "scope":"do.something"
}
Run Code Online (Sandbox Code Playgroud)

特别是在资源服务器上,我发现为身份验证问题获取不同的错误格式有点奇怪。所以我想改变这个异常的呈现方式。

文件说:

授权服务器中的错误处理使用标准的 Spring MVC 特性,即 @ExceptionHandler 方法

所以我尝试了这样的事情来自定义错误的格式:

@ControllerAdvice
@Order(Ordered.HIGHEST_PRECEDENCE)
public class MyErrorHandler {

    @ExceptionHandler(value = {InsufficientScopeException.class})
    ResponseEntity<MyErrorRepresentation> handle(RuntimeException ex, HttpServletRequest request) {
        return errorResponse(HttpStatus.FORBIDDEN,
                MyErrorRepresentation.builder()
                        .errorId("insufficient.scope")
                        .build(),
                request);
    }
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用。

查看代码,所有的错误渲染似乎都是在DefaultWebResponseExceptionTranslator#handleOAuth2Exception. 但是实现自定义WebResponseExceptionTranslator不允许更改格式。

任何提示?

spring spring-security spring-security-oauth2

6
推荐指数
2
解决办法
6709
查看次数