Saya mencoba mengirim otorisasi ke server di header permintaan apa pun yang saya coba pertama kali menggunakan Interceptor dan kemudian ketika saya mencari dan saya menemukan autentikator dan saya mencobanya tetapi tidak dipanggil dan saya masih mendapatkan 401 dalam tanggapan.

Ini kode saya:

public static ElasticApiRetrofitServiceClient getElasticApiRetrofitServiceClient() {

        if (elasticApiRetrofitServiceClient == null) {
            OkHttpClient client = new OkHttpClient();
            client.newBuilder()
                    .connectTimeout(Const.TIMEOUT, TimeUnit.SECONDS)
                    .readTimeout(Const.TIMEOUT, TimeUnit.SECONDS)
                    .authenticator(new MyInterceptor())
                    .addInterceptor(new MyInterceptor()).build();


            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl(ELASTIC_BASE_URL)
                    .client(client)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
            elasticApiRetrofitServiceClient = retrofit.create(ElasticApiRetrofitServiceClient.class);
        }
        return elasticApiRetrofitServiceClient;
    }

Dan ini adalah Interceptor/Authenticator saya

class MyInterceptor : Interceptor, Authenticator {
    override fun intercept(chain: Interceptor.Chain): Response {
        val originalRequest = chain.request();

        val newRequest = originalRequest . newBuilder ()
            .header("Authorization", "SOME_TOKEN")
            .build();

        return chain.proceed(newRequest);
    }

    @Throws(IOException::class)
    override fun authenticate (route: Route?, response: Response?): Request? {
        var requestAvailable: Request? = null
        try {
            requestAvailable = response?.request()?.newBuilder()
                ?.addHeader("Authorization", "SOME_TOKEN")
                ?.build()
            return requestAvailable
        } catch (ex: Exception) { }
        return requestAvailable
    }
}

Masalahnya adalah saya melakukan debug beberapa kali dan pencegat/autentikator tidak pernah dipanggil.

0
Master Fathi 14 Agustus 2019, 13:40

1 menjawab

Jawaban Terbaik

Anda menggunakan metode newBuilder pada OkHttpClient yang akan membuat builder baru dan Anda tidak menggunakan builder itu melainkan menggunakan builder lama.

public static ElasticApiRetrofitServiceClient getElasticApiRetrofitServiceClient() {

        if (elasticApiRetrofitServiceClient == null) {
            OkHttpClient client = new OkHttpClient.Builder()
                    .connectTimeout(Const.TIMEOUT, TimeUnit.SECONDS)
                    .readTimeout(Const.TIMEOUT, TimeUnit.SECONDS)
                    .authenticator(new MyInterceptor())
                    .addInterceptor(new MyInterceptor()).build();


            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl(ELASTIC_BASE_URL)
                    .client(client)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
            elasticApiRetrofitServiceClient = retrofit.create(ElasticApiRetrofitServiceClient.class);
        }
        return elasticApiRetrofitServiceClient;
    }
2
Birju Vachhani 14 Agustus 2019, 11:26