网络访问时,每个接口都需要携带token。如果在每个接口请求时都添加一次,太麻烦
可以使用全局的拦截器:
拦截器主要逻辑如下
/**
* 构造一个请求拦截器
*/
fun requestInterceptor(): Interceptor = RequestInterceptor()
/**
* 请求拦截器
*/
class RequestInterceptor : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val token = MainActivity.loginUserInfo?.token
if (token.isNullOrEmpty()) {
return chain.proceed(chain.request())
} else { // 如果 token不为空,则给其添加 token响应头,否则还是使用空的
val originRequest = chain.request()
if (originRequest.headers.get("token").isNullOrEmpty()) {
val newRequest = originRequest.newBuilder().addHeader("token", token).build()
return chain.proceed(newRequest)
} else {
return chain.proceed(chain.request())
}
}
}
}
创建 okhttpClient 时,添加拦截器
mOkHttpClient = OkHttpClient.Builder()
.connectTimeout(HttpConfig.CONNECT_TIMEOUT, TimeUnit.SECONDS) //建立连接 耗时
.readTimeout(HttpConfig.READ_TIMEOUT, TimeUnit.SECONDS)
.writeTimeout(HttpConfig.WRITE_TIMEOUT, TimeUnit.SECONDS)
.addInterceptor(InterceptorUtils.logInterceptor())//添加日志拦截器
.addInterceptor(InterceptorUtils.requestInterceptor()) // 添加请求拦截器,全局的添加token
.build()