没有合适的资源?快使用搜索试试~ 我知道了~
首页Android token过期刷新处理的方法示例
资源详情
资源评论
资源推荐

Android token过期刷新处理的方法示例过期刷新处理的方法示例
主要介绍了Android token过期刷新处理的方法示例,本文详细的介绍了2种方法,具有一定的参考价值,感兴趣
的小伙伴们可以参考一下
token
token的意思是“令牌”,是用户身份的验证方式,最简单的token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、
sign(签名,由token的前几位+盐以哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接token请求服务器)。还
可以把不变的参数也放进token,避免多次查库。
第一种方案第一种方案
通过okhttp提供的Authenticator接口,但是只有HTTP返回码为401时才会触发。此种方式局限性很大,要求后台设计必须符合
规范。在实际项目中不可能完美实现。此种方式不做详解,百度很多。
第二种方案第二种方案
根据和后端协商好的返回码处理刷新token步骤。代码如下;
public class TokenInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request.Builder request = chain.request().newBuilder();
//添加默认的Token请求头
request.addHeader("Cookie", UserInfo.getInstance().getPhpSessionId());
Response proceed = chain.proceed(request.build());
okhttp3.MediaType mediaType = proceed.body().contentType();
//如果token过期 再去重新请求token 然后设置token的请求头 重新发起请求 用户无感
String content = proceed.body().string();
if (isTokenExpired(content)) {
String newToken = getNewToken();
UserInfo.getInstance().setPhpSessionId(newToken);
//使用新的Token,创建新的请求
Request newRequest = chain.request().newBuilder()
.addHeader("Cookie", newToken)
.build();
return chain.proceed(newRequest);
}
return proceed.newBuilder()
.body(okhttp3.ResponseBody.create(mediaType, content))
.build();
}
private String getNewToken() {
// 通过一个特定的接口获取新的token,此处要用到同步的retrofit请求
IndexService service = IndexService.Builder.getServer();
Call<BaseObjResult<UserBean>> call = service.getToke(
UserInfo.getInstance().getPhone(),
UserInfo.getInstance().getPwd(),
0);
//要用retrofit的同步方式
BaseObjResult<UserBean> newToken = null;
try {
newToken = call.execute().body();
} catch (IOException e) {
e.printStackTrace();
}
return newToken.getResult().getPHPSESSID();
}
/**
* 根据Response,判断Token是否失效
*
* @return
*/
private boolean isTokenExpired(String resultStr) {
RequestCode requestCode = new Gson().fromJson(resultStr, RequestCode.class);



















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0