需求是这样的:请求接口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. SpringMVC请求体参数处理问题

    如果请求定义为application/json格式,则要用Spring MVC中@RequestBody参数才能接受(用@RequestParam参数接受会报400错误),但SpringMVC的@Re ...

  2. How tbb proxy works

  3. navicat外键设置

    https://blog.csdn.net/qq_32486599/article/details/73497810

  4. 贪吃蛇(c语言实现)

    总结出以下几点: 1.需要多次被包含的头文件里不能定义全局变量,否则会报错“重定义” 2.char *strncpy(char *dest, const char *src, int n), 把src ...

  5. Scrapy 爬虫日志中出现Forbidden by robots.txt

    爬取汽车之家数据的时候,日志中一直没有任何报错,开始一直不知道什么原因导致的,后来细细阅读了下日志发现日志提示“Forbidden by robots.txt”,Scrapy 设置文件中如果把ROBO ...

  6. 商品和订单中使用MQ

    一.将Product服务增加到配置中心 1.添加引用 <dependency> <groupId>org.springframework.cloud</groupId&g ...

  7. Hystrix 常用属性配置

    配置参数 默认值 说明 命令-执行属性配置 hystrix.command.default.execution.isolation.strategy THREAD 配置隔离策略,有效值 THREAD, ...

  8. Spring Cloud(Dalston.SR5)--Eureka 服务提供者

    要使微服务应用向注册中心发布自己,首先需要在 pom.xml 配置文件中增加对 spring-boot-starter-eureka 的依赖,然后在主类中增加 @EnableDiscoveryClie ...

  9. Python程序的执行过程 解释型语言和编译型语言

    转载地址:http://blog.csdn.net/lujiandong1/article/details/50067655 1. Python是一门解释型语言? 我初学Python时,听到的关于Py ...

  10. 关于AXI4-Stream to Video Out 和 Video Timing Controller IP核学习

    关于AXI4-Stream to Video Out 和 Video Timing Controller IP核学习 1.AXI4‐Stream to Video Out Top‐Level Sign ...