Ich habe Retrofit mit Basisauthentifizierung implementiert, ich sende die @ header auf meine Login-Anfrage, aber wenn ich einige authentifizierte Anfrage aufrufen, gibt es mir 401 (nicht autorisiert).Retrofit + Standard-Authentifizierung
Wie implementiere ich es generisch? Oder muss ich meine authentifizierten Anfragen immer mit @header aufrufen?
@GET("user")
Call<User> getUserByEmail(@Query("email") String email, @Header("Authorization") String authorization);
Wenn ich Benutzer von E-Mail, rufen Sie (ich den Benutzer authentifizieren) ...
@PUT("usuario/{userId}/")
Call<User> putUserById(@Path("userId") Integer id, @Body User user);
Wenn ich Benutzer Put Call (ich brauche eine authentifizierte Anforderung zu machen).
Meine Retrofit-Klasse ...
public class NetworkService {
private NetworkAPI networkAPI;
private OkHttpClient okHttpClient;
public NetworkService() {
okHttpClient = buildClient();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BuildConfig.HOST)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build();
networkAPI = retrofit.create(NetworkAPI.class);
}
public NetworkAPI getAPI() {
return networkAPI;
}
private OkHttpClient buildClient() {
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Response response = chain.proceed(chain.request());
return response;
}
});
builder.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
//this is where we will add whatever we want to our request headers.
Request request = chain.request().newBuilder()
.addHeader("Accept", "application/json")
.addHeader("Content-Type", "application/json")
.build();
return chain.proceed(request);
}
});
return builder.build();
}
}
Kann mir jemand helfen?
* Oder ich muss immer meine authentifizierten Anfragen mit @header? * Aufrufen, das hängt davon ab, wie Sie auth auf Ihrem Server implementiert haben und wie Sie Anfragen/Geräte identifizieren. –
Können Sie mir einen zeigen? Beispiel, um es generisch zu machen? –
Sie können Header in Anforderung von RequestInterceptor hinzufügen und diesen Interceptor zu Ihrem RestAdapter hinzufügen. Und für jede Anfrage benutzen Sie diesen Restadapter, damit Sie nicht jedes Mal Header hinzufügen müssen. – rushi