我刚刚学习了改造 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/