使用春季安卓处理 401 错误的最佳方法



我有一个安卓应用程序,它使用春季安卓库与我的 Restful API 进行通信。我不确定如何处理客户端令牌过期时的情况。我想捕获任何 401 错误,只需获取一个新令牌并重试请求。

我创建了一个 ResponseErrorHandler 并将其连接到我的 rest 模板:

public class UnauthorizedErrorHandler implements ResponseErrorHandler { 
    ....
    public void handleError(ClientHttpResponse response) throws IOException {
        if (response.getStatusCode().value() == HttpStatus.SC_UNAUTHORIZED) { // 401 error
            // fetch a new token
            // Retry request now that we have a new token???? 
        }
    }
}

我的问题是我无法访问响应错误处理程序中的原始请求。除非我错过了什么,否则这个策略似乎是合理的,但我不确定如何让它发挥作用。对于任何使用 OAuth 令牌的客户来说,这似乎也是一个典型场景,所以希望有人能为我指出正确的方向。

如果令牌已过期,则应要求用户再次登录。

假设用户删除了您的 OAuth 应用程序访问权限,您的应用程序将收到过期令牌或类似错误,您应该让用户登录并再次授予您的应用程序访问权限。

如果您引用的不是 OAuth 令牌,而是您自己的 API,则应创建某种机制来更新客户端要使用的令牌。例如,您可以在响应上发送带有新令牌的标头,要求用户从该点开始使用新值,或者作为响应正文的一部分或请求令牌交换的推送通知等。

最新更新