【发布时间】:2015-10-27 09:23:39
【问题描述】:
我们有一个使用 Spring OAuth2 的 REST API。用户通过身份验证后,所有 JSON 响应格式如下:
{"code" : 12345, "data" : "..." }
但是验证失败的 JSON 响应不符合上述格式,因为它是由 Spring 处理的。
例如,在凭据不正确的情况下,客户端会得到 带有 JSON 响应的 HTTP 状态码 400 如下:
{"error": "invalid_grant", "error_description": "Bad credentials" }
如果用户帐户被锁定,客户端会收到带有 JSON 响应的 HTTP 状态代码 400,如下所示
{"error":"invalid_grant","error_description":"User account is locked"}
这一切都是因为 Spring TokenEndpoint.handleException() 正在处理与 /oauth/token 相关的异常
我想更改 OAuth2 失败的 JSON 响应以遵循第一种格式。
这是我迄今为止尝试过的,但没有成功:
- 使用具有最高优先级的 ControllerAdvice 并使用 @ExceptionHandler,如 here 所述
- 按照here 的描述实现 OAuth2ExceptionRenderer
- 实现异常映射器
- 添加了一个新的 ObjectMapper,扩展了 StdSerializer。尽管我的 objectmapper 已初始化,但它并未用于序列化异常。可能是因为 Spring 直接调用 MappingJackson2HttpMessageConverter 并且我的应用中似乎有这个类的多个实例。
对于上述任何一种方法或新方法的任何帮助,我们将不胜感激。
我没有尝试过this 方法,因为我无法更改现有客户端的上下文路径。
【问题讨论】:
标签: java json spring oauth spring-security-oauth2