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

标签 android spring oauth-2.0 spring-android

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

我创建了一个 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 token 的客户端的典型场景,因此希望有人能为我指明正确的方向。

最佳答案

如果 token 已过期,那么您应该要求用户重新登录。

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

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

关于android - 使用 spring android 处理 401 错误的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27053388/

相关文章:

facebook - Uncaught Error ...FB.Auth.setAuthResponse 仅与 OAuth2 兼容

android - ListView 和 RecyclerView 有什么区别

android - 如何在 Lollipop 或 Android M 上的最新 Android Chrome 版本中更改标题栏和地址栏的文本颜色?

java - 设计一个 "updatable"静态集与 Spring 一起使用?

java - 如果 Kubernetes 上存在多个 pod,则从单个 pod 运行 Spring 中的 Scheduled Cron 方法

c# - Jwt token 授权不起作用

Android RoboSpice 缓存管理和离线模式

android - 从 SharedPreferences 中删除条目 - Android

java - 使用单独的 application.properties 创建 Spring Boot 测试

oauth-2.0 - 尝试了解 OAuth2 流程