使用spring android处理401错误的最佳方法

时间:2014-11-21 02:56:40

标签: android spring oauth-2.0 spring-android

我有一个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???? 
        }
    }
}

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

1 个答案:

答案 0 :(得分:1)

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

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

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