Retrofit Token过期 重新请求Token再去请求接口
需求是这样的:请求接口A -- 服务器返回数据Token过期或失效 -- 重新请求Token并设置 -- 再去请求接口A
刚解决了这个问题,趁热打铁,写个博客记录一下;这个Token是添加到请求头里面的;
使用OKHTTP设置Retrofit中的请求头:
*记录请求到的Token
/**
* 请求头token
* @return
*/
public String headerToken = "";
*如果Token过期或失效,则去重新请求获取token的接口,然后设置请求头,再去重新请求这个接口。
OkHttpClient.Builder client = new OkHttpClient.Builder();
client.connectTimeout(30, TimeUnit.SECONDS);
client.readTimeout(30, TimeUnit.SECONDS);
client.writeTimeout(30, TimeUnit.SECONDS);
client.addInterceptor(new Interceptor() { @Override
public Response intercept(Chain chain) throws IOException {
Request.Builder request = chain.request().newBuilder();
request.addHeader("Authorization", headerToken); //添加默认的Token请求头
Response proceed = chain.proceed(request.build());
//如果token过期 再去重新请求token 然后设置token的请求头 重新发起请求 用户无感
if (isTokenExpired(proceed)){
String newHeaderToken = getNewToken();
//使用新的Token,创建新的请求
Request newRequest = chain.request().newBuilder()
.addHeader("Authorization", newHeaderToken)
.build();
return chain.proceed(newRequest);
}
return proceed;
}
});
*判断Token过期的方法
/**
* 根据Response,判断Token是否失效
* 401表示token过期
* @param response
* @return
*/
private boolean isTokenExpired(Response response) {
if (response.code() == 401) {
return true;
}
return false;
}
*重新请求Token的方法,注意这个方法不能使用异步,要使用同步请求;
/**
* 同步请求方式,获取最新的Token
*
* @return
*/
private String getNewToken() throws IOException { Retrofit retrofit= new Retrofit.Builder()
.baseUrl("https://xxxxx")
.addConverterFactory(GsonConverterFactory.create())
.build();
retrofit2.Response<JsonObject> tokenJson = retrofit.create(CommonApi.class).ccbTestGetToken().execute();
headerToken = tokenJson.body().get("Token").toString();
return headerToken;
}
参考博客 一叶扁舟:https://blog.csdn.net/jdsjlzx/article/details/52442113
Retrofit Token过期 重新请求Token再去请求接口的更多相关文章
- 请求时token过期自动刷新token
1.在开发过程中,我们都会接触到token,token的作用是什么呢?主要的作用就是为了安全,用户登陆时,服务器会随机生成一个有时效性的token,用户的每一次请求都需要携带上token,证明其请求的 ...
- Vue 消除Token过期时刷新页面的重复提示
1.问题现象 页面长时间未操作,再刷新页面时,第一次弹出"token失效,请重新登录!"提示,然后跳转到登录页面,接下来又弹出了n个"Token已过期"的后 ...
- token回话保持,axios请求拦截和导航守卫以及token过期处理
1:了解token:有时候大家又说token令牌.整个机制是前端第一次登陆发送请求,后端会根据前端的用户名和密码, 通过一些列的算法的到一个token令牌, 这个令牌是独一无二的,前端每次发送请求都需 ...
- vue中前端处理token过期的方法与axios请求拦截处理
在处理token过期的这个问题上困扰了我很久,现在终于解决的了,所以分享出来给大家,希望能够对大家有所帮助. 首先,当然是路由进行拦截,路由拦截当然是在beforeEach中了: router.bef ...
- axios reponse请求拦截以及token过期跳转问题
前两天项目中遇到了token拦截,需要在请求的header头里放置token,需要用到response拦截,调试过程中遇到了拿不到token的问题 我用的axios实例 let token = sto ...
- vue axios封装以及登录token过期跳转问题
Axios配置JWT/封装插件/发送表单数据 首先请务必已仔细阅读 Axios 文档并熟悉 JWT: 中文文档 JWT 中文文档 安装 npm install axios npm install es ...
- 如何解决前后端token过期问题
问题描述: 首先后端生成的token是有时限的,在一段时间后不管前端用户是否进行了访问后端的操作,后端的token都会过期,在拦截器阶段就会返回错误的请求:token过期,从而拿不到想要的请求数据. ...
- 如何管理第三方接口token过期时间
背景: 随着微服务的盛行,做开发时不可避免的要涉及第三方接口,安全起见,这些接口都会需要一个token参数.而token一般都会有一个过期时间,比如2小时或者30分钟.那么如何在自己的应用中存储并管理 ...
- 微信access token过期
两台服务器使用同一个微信账号(同一个app id) 时,当其中一台服务器向微信请求access token时,会造成另一台服务器的access token过期
随机推荐
- 上外网tunnel手段
需要的软件 1, httptunnel软件,包括服务端和客户端,家里开启服务端,公司开启客户端 2,(可选)proxifier PE,用来在公司check 代理工作是否正常 3,动态域名服务,在家里用 ...
- vue线上项目,优化前后对比
优化前: dev初次时间:52s dev时间:5s~6s build时间:374s(6.2分钟) build后zip包大小: vue.vue-router 优化后: dev初次时间:49s.48s.5 ...
- [c/c++]可变参数的使用
一.可变参数简介 当一个函数需要传递未知个数的参数时,就需要用到可变参数, 比如常见的printf()函数,输出多个变量: printf("print para1:%d ,para2 :%d ...
- Python Scrapy环境搭建(一)
本来是以学习的目的添加了几个QQ群,但是发现群内有着很多的小白都在咨询如何搭建环境的问题,所以我这里把自己搭建的方法分享下 1.首先我们需要查看下自己安装的python的版本; 最简单的版本就是在命令 ...
- 使用Vivado进行行为级仿真
使用Vivado进行行为级仿真 1.编写设计文件 module test( input in, output out ); assign out = ~in; endmodule 2.编写testbe ...
- delphi中Time消息的使用方法
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...
- TeamViewer 的早期版本下载
对于10及上以的:https://www.teamviewer.com/zhcn/download/previous-versions/ 5~9的版本下载:https://community.team ...
- Base64 转 图片
static void Main(string[] args) { string s = "iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAIAAAABc2X6AAAAC ...
- Linux环境下查看线程数的几种方法
1.cat /proc/${pid}/status 2.pstree -p ${pid} 3.top -p ${pid} 再按H,或者直接输入 top -bH -d 3 -p ${pid} top ...
- EXSI6.5复制文件太慢的解决方法
听说裸金属服务器性能比在windows中安装VMware workstations要好,就在电脑上安装了一个EXSI6.5. 可是在复制文件时很慢,一个3G的文件复制了两三个小时,还时常担心网络会断, ...