小编ale*_*lek的帖子

如何包装OAuth2异常?

我们有一个使用的rest API Spring OAuth2.用户通过身份验证后,所有JSON响应都采用以下格式:

{"code" : 12345, "data" : "..." }
Run Code Online (Sandbox Code Playgroud)

但是,身份验证失败的JSON响应与上述格式不一致,因为它由Spring处理.

例如,如果凭据不正确,客户端将获得带有JSON响应的HTTP状态代码400,如下所示:

{"error": "invalid_grant", "error_description": "Bad credentials" }
Run Code Online (Sandbox Code Playgroud)

如果用户帐户被锁定,客户端将获得具有JSON响应的HTTP状态代码400,如下所示

{"error":"invalid_grant","error_description":"User account is locked"}
Run Code Online (Sandbox Code Playgroud)

所有这一切都是因为Spring TokenEndpoint.handleException()正在处理与/ oauth/token相关的异常

我想更改OAuth2失败的JSON响应以遵循第一种格式.

这是我迄今为止尝试过的但没有成功:

  1. 使用ControllerAdvice最高precendence为了与使用@ExceptionHandler描述这里
  2. 实施OAuth2ExceptionRenderer描述这里
  3. 实现ExceptionMapper
  4. 添加了一个新的ObjectMapper,扩展了StdSerializer.虽然我的objectmapper已初始化,但它不用于序列化异常.也许是因为Spring直接调用MappingJackson2HttpMessageConverter而且我的应用程序中似乎有这个类的几个实例.

任何上述方法或新方法的任何帮助将受到高度赞赏.

我没有尝试过这种方法,因为我无法更改现有客户端的上下文路径.

java spring json oauth spring-security-oauth2

5
推荐指数
1
解决办法
2113
查看次数

标签 统计

java ×1

json ×1

oauth ×1

spring ×1

spring-security-oauth2 ×1