需求是这样的:请求接口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再去请求接口的更多相关文章

  1. 请求时token过期自动刷新token

    1.在开发过程中,我们都会接触到token,token的作用是什么呢?主要的作用就是为了安全,用户登陆时,服务器会随机生成一个有时效性的token,用户的每一次请求都需要携带上token,证明其请求的 ...

  2. Vue 消除Token过期时刷新页面的重复提示

    1.问题现象   页面长时间未操作,再刷新页面时,第一次弹出"token失效,请重新登录!"提示,然后跳转到登录页面,接下来又弹出了n个"Token已过期"的后 ...

  3. token回话保持,axios请求拦截和导航守卫以及token过期处理

    1:了解token:有时候大家又说token令牌.整个机制是前端第一次登陆发送请求,后端会根据前端的用户名和密码, 通过一些列的算法的到一个token令牌, 这个令牌是独一无二的,前端每次发送请求都需 ...

  4. vue中前端处理token过期的方法与axios请求拦截处理

    在处理token过期的这个问题上困扰了我很久,现在终于解决的了,所以分享出来给大家,希望能够对大家有所帮助. 首先,当然是路由进行拦截,路由拦截当然是在beforeEach中了: router.bef ...

  5. axios reponse请求拦截以及token过期跳转问题

    前两天项目中遇到了token拦截,需要在请求的header头里放置token,需要用到response拦截,调试过程中遇到了拿不到token的问题 我用的axios实例 let token = sto ...

  6. vue axios封装以及登录token过期跳转问题

    Axios配置JWT/封装插件/发送表单数据 首先请务必已仔细阅读 Axios 文档并熟悉 JWT: 中文文档 JWT 中文文档 安装 npm install axios npm install es ...

  7. 如何解决前后端token过期问题

    问题描述: 首先后端生成的token是有时限的,在一段时间后不管前端用户是否进行了访问后端的操作,后端的token都会过期,在拦截器阶段就会返回错误的请求:token过期,从而拿不到想要的请求数据. ...

  8. 如何管理第三方接口token过期时间

    背景: 随着微服务的盛行,做开发时不可避免的要涉及第三方接口,安全起见,这些接口都会需要一个token参数.而token一般都会有一个过期时间,比如2小时或者30分钟.那么如何在自己的应用中存储并管理 ...

  9. 微信access token过期

    两台服务器使用同一个微信账号(同一个app id) 时,当其中一台服务器向微信请求access token时,会造成另一台服务器的access token过期

随机推荐

  1. removing-guest-session-at-login-in-ubuntu-14-04

    http://askubuntu.com/questions/451526/removing-guest-session-at-login-in-ubuntu-14-04

  2. 用express快速写一个hello world

    首页要具备 node.js环境, npm环境 创建一个目录, 然后进入此目录作为工作目录 mkdir myapp cd myapp 通过npm init 创建一个package.json文件 npm ...

  3. [转]使用 Angular CLI 和 ng-packagr 构建一个标准的 Angular 组件库

    使用 Angular CLI 构建 Angular 应用程序是最方便的方式之一. 项目目标 现在,我们一起创建一个简单的组件库. 首先,我们需要创建一个 header 组件.这没什么特别的,当然接下来 ...

  4. Linux 命令自动补齐快捷键

    Linux 命令自动补齐快捷键 : TAB

  5. RedHat6.5上安装Hadoop单机

    版本号:RedHat6.5   JDK1.8   Hadoop2.7.3 hadoop  说明:从版本2开始加入了Yarn这个资源管理器,Yarn并不需要单独安装.只要在机器上安装了JDK就可以直接安 ...

  6. Centos7安装WPS和截图工具shutter

    centos7安装WPS 1..在wps官网上下载rpm安装包 2..rpm包安装命令 yum install xxx[安装包的名字] 注意:执行此项命令需要root权限 3.安装完成后即可使用 Ce ...

  7. InfluxDB 1.6文档

    警告!此页面记录了不再积极开发的InfluxDB的早期版本.InfluxDB v1.7是InfluxDB的最新稳定版本. InfluxDB是一个时间序列数据库,旨在处理高写入和查询负载.它是TICK堆 ...

  8. Python开发工具Atom

    python基础教程之Python开发工具Atom   本节内容如下: Atom简介 下载安装Atom 安装Python开发包 使用Atom开发Python程序 Atom简介 Atom是Github开 ...

  9. 【linux】之常用命令-杂项

    查看端口:lsof -i :80 二.内存大小[root@xbidc ~]# cat /proc/meminfo |grep MemTotalMemTotal: 1034612 kB[root@xbi ...

  10. 【Nginx】之安装使用和配置SSL支持

    本文采用的是nginx源码安装 1.下载nginx源码包 wget http://nginx.org/download/nginx-1.8.0.tar 或者登录nginx官网下载更高版本 2.ngin ...