有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓改型将自定义头添加为令牌java

我只是学习了安卓系统改造的基本知识,但是我有很多关于标题的问题

我有一个RESTAPI服务器,在我的API导出数据之前,它请求有API密钥,该密钥存储在头授权上。现在,在执行之前,我想将API键初始化到头中

这是我的密码

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密钥

另一种方法是这样

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嗯,有人有解决这个问题的办法吗?或者可能是我实施错了


共 (2) 个答案

  1. # 1 楼答案

    如果你想为你的用户创建API密钥,我建议你首先创建POJO对象,它代表你的用户

        static class User {
            @SerializedName("identifier")
            String identifier;
    
            @SerializedName("password")
            String password;
    
            public User(String username, String password) {
                this.identifier = username;
                this.password = password;
            }
        }
    

    下一步创建Service来处理POST请求

        public interface HttpService {
            @POST("path")
            Call<Object> postWithJson(
                    @Header("Content-Type") String contentType,
                    @Header("Token") String token,
                    @Body User user
            );
        }
    

    现在,您只需呼叫服务,例如:

    String apiKey = 52d5bc6ecc5fasdad123124125r23fsd12312;
    
    Call<Object> call = service.postWithJson("application/json; charset=UTF-8", apiKey, new User("login", "password"));
    

    作为回应,你可以得到你想要的,例如: response.headers().get("tokenKey")

  2. # 2 楼答案

    我也有同样的问题,我就是这样解决的

    首先,这是我的客户。注意请求头“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 — Token Authentication on Android中找到了改造客户端