Android 如何处理 Token 过期问题

在现代移动应用中,用户身份验证是安全性的重要组成部分。大多数应用使用 JSON Web Tokens (JWT) 作为安全认证的方法。然而,Token 具有过期时间,过期后无法继续使用,这就要求我们在应用中处理 Token 的过期问题。

Token 过期的典型场景

一般情况下,Token 过期会导致以下问题:

  1. 用户在进行网络请求时,Token 已失效,服务器返回错误信息(如401 Unauthorized)。
  2. 用户需要在应用中重新登录,可能影响用户体验。

为了处理这些问题,需要在应用中实现 Token 刷新机制,以便在 Token 过期时自动获取新的 Token。

实现 Token 刷新机制

以下是实现 Token 刷新机制的大致步骤:

  1. 检查 Token 是否过期:在发起网络请求之前,检查 Token 是否过期。
  2. 请求新的 Token:如果 Token 已过期,调用刷新 Token 的 API。
  3. 重试原始请求:使用新的 Token 重试之前因 Token 过期而失败的请求。

示例代码

下面是一个实际的示例,演示如何在 Android 应用中处理 Token 过期。

public class TokenManager {
    private String accessToken;
    private String refreshToken;

    public TokenManager(String accessToken, String refreshToken) {
        this.accessToken = accessToken;
        this.refreshToken = refreshToken;
    }

    public boolean isTokenExpired() {
        // 假设使用 JwtUtils 判断 Token 是否过期
        return JwtUtils.isExpired(accessToken);
    }

    public void refreshToken(Callback callback) {
        // 发送请求以刷新 Token
        ApiService.refreshToken(refreshToken, new ApiCallback() {
            @Override
            public void onSuccess(String newAccessToken) {
                accessToken = newAccessToken;
                callback.onSuccess(newAccessToken);
            }

            @Override
            public void onError() {
                callback.onError();
            }
        });
    }
}

// 网络请求示例
public void makeRequest() {
    if (tokenManager.isTokenExpired()) {
        tokenManager.refreshToken(new Callback() {
            @Override
            public void onSuccess(String newAccessToken) {
                // 使用新的 access token 重试请求
                ApiService.makeRequest(newAccessToken);
            }

            @Override
            public void onError() {
                // 处理需要重新登录的情况
            }
        });
    } else {
        ApiService.makeRequest(tokenManager.getAccessToken());
    }
}

Token 刷新流程图

erDiagram
    USER {
        string ID
        string refreshToken
    }
    TOKEN {
        string accessToken
        string expiresIn
    }

    USER ||--o{ TOKEN : refresh

总结

在 Android 应用中处理 Token 过期问题是提升用户体验的重要环节。通过简单的 Token 刷新机制,可以有效避免用户因 Token 过期而频繁被迫重新登录。在实际应用开发中,采用统一的 Token 管理策略,不仅让代码更具可维护性,还能降低错误率。

通过上述示例和流程图,我们可以更清晰地理解如何轻松而有效地实现 Token 过期处理机制。希望本文对你的开发工作有所帮助!