【问题标题】:Best way to handle 401 errors with spring android使用spring android处理401错误的最佳方法
【发布时间】:2015-01-19 03:04:47
【问题描述】:

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

【问题讨论】:

    标签: android spring oauth-2.0 spring-android


    【解决方案1】:

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

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

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

    【讨论】:

    • 罗伯特,感谢您的回复!抱歉,我想我应该更清楚一点,但我使用的是刷新令牌,因此除非刷新令牌也已过期,否则无需重新进行身份验证。
    猜你喜欢
    • 1970-01-01
    • 2015-12-11
    • 2015-02-28
    • 2016-08-21
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多