okhttp添加拦截器,为每个请求头添加token

okhttp添加拦截器,为每个请求头添加token

网络访问时,每个接口都需要携带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()

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://zwc365.com/2021/08/18/okhttp添加拦截器为每个请求头添加token

Buy me a cup of coffee ☕.