android - Retrofit2 Authorization - 访问 token 的全局拦截器

标签 android retrofit okhttp

我正在尝试使用 Retrofit2, 我想将 Token 添加到我的 Header 像这样:

授权:承载 token 但是下面的 code 不起作用:

public interface APIService {
    @Headers({"Authorization", "Bearer "+ token})
    @GET("api/Profiles/GetProfile?id={id}")
    Call<UserProfile> getUser(@Path("id") String id);
}

我的服务器是 asp.net webApi。请帮忙,我该怎么办?

最佳答案

你有两个选择——你可以将它作为参数添加到你的调用中——

@GET("api/Profiles/GetProfile?id={id}")
Call<UserProfile> getUser(@Path("id") String id, @Header("Authorization") String authHeader);

这可能有点烦人,因为您必须在每次调用时传入 "Bearer"+ token。如果您没有太多需要 token 的调用,这很适合。

如果你想给所有请求添加header,可以使用okhttp拦截器——

OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new Interceptor() {
      @Override
      public Response intercept(Chain chain) throws IOException {
        Request newRequest  = chain.request().newBuilder()
            .addHeader("Authorization", "Bearer " + token)
            .build();
        return chain.proceed(newRequest);
      }
    }).build();

Retrofit retrofit = new Retrofit.Builder()
    .client(client)
    .baseUrl(/** your url **/)
    .addConverterFactory(GsonConverterFactory.create())
    .build();

关于android - Retrofit2 Authorization - 访问 token 的全局拦截器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41078866/

相关文章:

android - 延迟 MockWebServer 响应

okhttp - Spring 警告没有 jackson-module-kotlin

android - Angular Js 和 Trigger.io - 无法点击适用于 iOS 的 Android 链接

android - 如何实现一个android :background that doesn't stretch?

java - 尝试拦截 Retrofit 请求时出现未经授权的错误

android - 使用 Retrofit/Gson 解析日期时出现 JsonSyntaxException

android - 使用 MVP 在 Android 网络请求上更新 UI

java - 我的模拟器没有运行。 Logcat 中甚至什么也没有显示。它显示 "No Connected device"和 "No Debuggable pro"

java - 比较列表<String[]>

android - 如何模拟 Retrofit Response