Retrofit2:使用拦截器在查询参数中添加访问令牌

时间:2016-09-19 11:38:42

标签: android access-token interceptor retrofit2 okhttp3

我正在尝试使用此tutorial

为每个请求添加查询参数(访问令牌)

问题是拦截器,在ServiceGenerator创建的每个请求中都会产生计数:

httpClient.addInterceptor(new Interceptor() {

同样导致httpClient是静态的,所有拦截器都将在不需要的请求中执行。

我应该为正常请求创建自己的OkHttpClients并拥有令牌请求吗?我应该只初始化拦截器和身份验证器一次,然后使用ServiceGenerator?或者有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

我认为将访问令牌添加为查询参数不是一个好主意。

更好的方法是将它添加到这样的自定义标题中:

okHttpClient = new OkHttpClient.Builder()
                .cache(setCache(context))
                .certificatePinner(certificatePinnerBuilder.build())
                .retryOnConnectionFailure(false)
                .readTimeout(READ_TIMEOUT, TimeUnit.MILLISECONDS)
                .connectTimeout(CONNECTION_TIMEOUT, TimeUnit.MILLISECONDS)
                .addInterceptor(new Interceptor() {
                    @Override
                    public okhttp3.Response intercept(Chain chain) throws IOException {
                        Request original = chain.request();

                        Request request = original.newBuilder()
                                .header("Content-type", "application/json")
                                .header("AUTH_TOKEN", token)
                                .method(original.method(), original.body())
                                .build();

                        return chain.proceed(request);
                    }
                })
                .addInterceptor(logger)
                .build();

但是,您可以点击此链接:

https://futurestud.io/tutorials/retrofit-2-how-to-add-query-parameters-to-every-request