业务场景 :
在业务中经常会遇到这种需求,用户登录后用户token是具有一定的时效性的,当token过期后怎样刷新token,且用户并不会感知到token已经刷新了呢,这个时候就需要我们在拦截器里面进行处理了。
实现方式:一般后台会定义一个token 一个refreshToken,当token失效后,利用refreshToken去请求获取新的token再刷新token;
关键代码:
首先定义一个TokenInterceptor继承至Interceptor,重写onResponse或者onError方法,具体看后台是怎么定义token失效规则的,如果后台自己定义了一套规则来判断token失效的话,重写onResponse即可,下面用它来说明:
首先将后台返回的数据解析出来
final String data = response.data.toString();
BaseResult baseResult =BaseResult.fromJson(json.decode(data));
然后根据解析得到的BaseResult后台返回的对应的code码进行判断,具体的规则根据后台制定的为准,假设401是失效状态
if (baseResult.resultCode ==401) {
//Todo token失效进行token刷新
}
//下面是刷新token的代码
if (baseResult.resultCode ==401) {
//获取全局的dio实例
Dio dio = DioUtil.instance().dio;
dio.lock();
var newToken = a