2017-08-25 82 views
1

我有一個令牌,我將其保存到sharedPreferences,然後獲取該令牌,並將其作爲授權轉發給Retrofit請求。這是我的代碼,我用它來爲我的改造請求添加一個標題。添加標題以改進請求

我需要添加下面的標題: 「授權」,「承載」 +令牌

public static Retrofit getClient(String token) { 

    HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); 
    logging.setLevel(HttpLoggingInterceptor.Level.BODY); 
    OkHttpClient okClient = new OkHttpClient(); 

    Gson gson = new GsonBuilder() 
      .setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ") 
      .create(); 

    okClient.interceptors().add(chain -> { 
     Response response = chain.proceed(chain.request()); 
     return response; 
    }); 

    okClient.interceptors().add(chain -> { 
     Request original = chain.request(); 
     Request request = original.newBuilder() 
       .header("Authorization", token) 
       .method(original.method(), original.body()) 
       .build(); 

     return chain.proceed(request); 
    }); 

    okClient.interceptors().add(logging); 

    if (retrofit==null) { 
     retrofit = new Retrofit.Builder() 
       .baseUrl(Config.BASE_URL1) 
       .client(okClient) 
       .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) 
       .addConverterFactory(GsonConverterFactory.create(gson)) 
       .build(); 
    } 
    return retrofit; 
} 

這我怎麼我的令牌發送到改造客戶

Retrofit retrofit = RetrofitClient.getClient("Bearer" + " " +  authUser.getToken()); 
APIService mAPIService = retrofit.create(APIService.class); 

但不幸的是,服務器迴應消息未授權

回答

0

您可以在不使用攔截器的情況下將頭髮送到服務器。只需在您的服務接口添加一個字段在方法聲明是這樣的:

@GET("my/orders/{id}") 
Call<Order> getOrder(@Header("Authorization") String token, 
        @Path("id") int order_id); 

然後創建一個Call對象發送如下請求:

APIService apiService= retrofit.create(APIService.class); 
Call<Order> call = apiService.getOrder(token, id); 
call.enqueue(/*callback*/); 
0

嘗試此相同:

String credentials = "put your token here"; 
final String basic = "Basic " + Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP); 
Request.Builder requestBuilder = original.newBuilder() 
             .header("Authorization",basic);