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
不允许更改格式。
任何提示?