如何将拦截器添加到除一两个之外的所有API请求中?

时间:2017-04-17 10:08:29

标签: java android retrofit2 okhttp3 okhttp

我知道可以通过OkHttpClient向所有请求添加拦截器,但我想知道是否可以在Okhttp中为所有请求添加标头除了使用OkHttpClient的一个或两个请求。

例如,在我的 API 中,除了Authorization: Bearer token-here(获取令牌)和oauth/token之外,所有请求都需要持票令牌(api/users标头) (注册用户)路由。是否可以在一步中使用OkHttpClient为除排除的请求之外的所有请求添加拦截器,还是应该为每个请求单独添加标头?

1 个答案:

答案 0 :(得分:13)

我找到了答案!

基本上我像往常一样需要一个拦截器,我需要检查那里的 URL 以了解我是否应该添加授权标头。

import java.io.IOException;

import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;

/**
 * Created by Omar on 4/17/2017.
 */

public class NetInterceptor implements Interceptor {
    @Override
    public Response intercept(Chain chain) throws IOException {
        Request request = chain.request();
        if (request.url().encodedPath().equalsIgnoreCase("/oauth/token")
                || (request.url().encodedPath().equalsIgnoreCase("/api/v1/users") && request.method().equalsIgnoreCase("post"))) {
            return  chain.proceed(request);
        }
        Request newRequest = request.newBuilder()
                .addHeader("Authorization", "Bearer token-here")
                .build();
        Response response = chain.proceed(newRequest);
        return response;
    }
}