java - 改造将自定义 header 添加为 token - java

标签 java android retrofit

我刚刚学习了改造 android 的基础知识,但是我有很多关于标题的问题。

我有一个 REST API 服务器,在我的 api 导出数据之前,它请求拥有存储在 Header Authorization 上的 API KEY。现在在我的案例中,在执行之前,我想将 API KEY 初始化到 header 中。

这是我的代码

public interface VerifyClient{

    @Headers("Authorization: eNortjI0s1LKTSxKSUyvckguLcuv0EtJ") // <======================
    @FormUrlEncoded
    @POST("/sendcode/{id}")
    VerifyResponse verify(@Path("id") String id, @Field("to") String to, @Field("type") String type, @Field("code") String code);

}

这工作正常,但问题是如果另一个客户端 api key 怎么办?

另一种方法是这样的。

RequestInterceptor requestInterceptor = new RequestInterceptor()
            {
                @Override
                public void intercept(RequestFacade request) {
                    request.addHeader("Authorization", ApiKey); <======================
                }
            };

            return new RestAdapter
                    .Builder()
                    .setEndpoint(Var.REST_URL)
                    .setRequestInterceptor(requestInterceptor)
                    .build()
                    .create(VerifyClient.class)
                    .verify(userData[0], userData[1], userData[2], userData[3]);
        }

但它返回 401 Unauthorized 嗯,有人对此有解决方案吗?或者也许我实现错了。

最佳答案

我遇到了同样的问题,我就是这样解决的。

首先,这是我的客户。请注意请求 header “Authorization”:我必须在实际 token 之前放置关键字“Token”。或许这对您有帮助。

public static <S> S createService(Class<S> serviceClass, final String token) {

        RestAdapter.Builder builder = new RestAdapter.Builder()
                .setEndpoint(API_URL)
                .setClient(new OkClient(new OkHttpClient()));

        if (token != null) {
            builder.setRequestInterceptor(new RequestInterceptor() {
                @Override
                public void intercept(RequestFacade request) {
                    request.addHeader("Accept", "application/json");
                    request.addHeader("Authorization", "Token " + token);
                }
            });
        }

        RestAdapter adapter = builder.build();

        return adapter.create(serviceClass);
    }

我在以下链接中找到了 Retrofit 客户端 Retrofit — Token Authentication on Android

关于java - 改造将自定义 header 添加为 token - java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28846017/

相关文章:

java - Servlet 中的 JNDI 查找会导致 permgen 内存泄漏吗?

java - 在 EMF 中使用 eStorage

android - 有没有办法停止在 Android 仪器测试 Kotlin (ActivityTestRule) 中启动 Activity

安卓 : NetworkOnMainThreadException using Rx android and Retrofit

Android - Retrofit : java. security.cert.CertPathValidatorException:找不到证书路径的信任 anchor

java - 在流Java中拆分字符串

java - 使用 for 循环初始化二维 JPanel 数组

android - 如何在 android list 中声明 2 个搜索 Activity

android - 我如何选择一个好的android :sharedUserId?

java - 解析从 API 获取的对象列表