为了保证Http请求的安全性,最近开发的项目采用了OAuth2.0认证机制,在Http请求头中加入了参数签名和accessToken进行验证。这样就带来几个问题:
n多请求,如何做到统一签名?
accessToken过期后,如何Hold当前请求,进行token的无感刷新?
accessToken刷新后,如何直接进行原始请求的重发?
其实,使用OkHttp的Interceptors(拦截器)便可以优雅的解决这些问题
OkHttp的拦截器机制分为应用拦截器和网络拦截器两种,今天我们使用的是应用拦截器。关于两种拦截器的区别,网上已有很多文章。
1.添加拦截器
在我们生成OkHttpClient时调用addInterceptor即可:
OkHttpClient.Builder()
//连接超时设置
.connectTimeout(30, TimeUnit.SECONDS)
//写入超时设置,
.writeTimeout(30, TimeUnit.SECONDS)
//读取超时设置
.readTimeout(30, TimeUnit.SECONDS)
//添加签名拦截器
.addInterceptor(SignInterceptor())
//添加Token处理拦截器
.addInterceptor(TokenInterceptor())
//添加日志打印拦截器
.addInterceptor(LogInterceptor())
.buil