3

我有一个 android 应用程序,它使用 spring android 库与我的 restful api 进行通信。当我的客户的令牌过期时,我不确定如何处理这种情况。我想要的是捕获任何 401 错误并简单地获取一个新令牌并重试请求。

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

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 令牌的客户端来说,这似乎也是一个典型的场景,所以希望有人可以为我指明正确的方向。

4

1 回答 1

1

如果令牌已过期,那么您应该要求用户再次登录。

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

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

于 2014-11-25T23:24:48.290 回答