自定义服务器异常,SpringCloud Alibaba实战二十六 - Oauth2认证服务器自定义异常

本文介绍了如何在Spring Cloud Alibaba的OAuth2认证服务器中自定义异常处理,包括OAuth2Exception和客户端认证异常。通过创建自定义的异常翻译类和过滤器,实现了统一的异常返回格式,解决了授权模式错误、用户名或密码错误以及客户端错误等问题。
摘要由CSDN通过智能技术生成

前言

今天内容主要是解决一位粉丝提的问题:在使用 Spring Security OAuth2 时如何自定义认证服务器返回异常。

那么首先我们先以 Password模式为例看看在认证时会出现哪些异常情况。

授权模式错误

这里我们故意将授权模式 password 修改成 password1,认证服务器返回如下所示的异常

{

"error": "unsupported_grant_type",

"error_description": "Unsupported grant type: password1"

}

密码错误

在认证时故意输错 username 或 password 会出现如下异常错误:

{

"error": "invalid_grant",

"error_description": "Bad credentials"

}

客户端错误

在认证时故意输错 client_id 或 client_secret

{

"error": "invalid_client",

"error_description": "Bad client credentials"

}

上面的返回结果很不友好,而且前端代码也很难判断是什么错误,所以我们需要对返回的错误进行统一的异常处理,让其返回统一的异常格式。

问题剖析

如果只关注解决方案,可以直接跳转到解决方案模块!

OAuth2Exception异常处理

在Oauth2认证服务器中认证逻辑最终调用的是 TokenEndpoint#postAccessToken()方法,而一旦认证出现 OAuth2Exception异常则会被 handleException()捕获到异常。如下图展示的是当出现用户密码异常时debug截图:

170d37c1e23676358431220ea4774a47.png

认证服务器在捕获到 OAuth2Exception后会调用 WebResponseExceptionTranslator#translate()方法对异常进行翻译处理。

默认的翻译处理实现类是 DefaultWebResponseExceptionTranslator,处理完成后会调用 handleOAuth2Exception()方法将处理后的异常返回给前端,这就是我们之前看到的异常效果。

处理方法

熟悉Oauth2套路的同学应该知道了如何处理此类异常,就是「自定义一个异常翻译类让其返回我们需要的自定义格式,然后将其注入到认证服务器中。」<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值