Добавление токена аутентификации JWT в OkHttp, Dagger 2 и Retrofit - PullRequest
0 голосов
/ 13 ноября 2018

следующий пост Dagger + Retrofit. Добавление заголовков аутентификации во время выполнения Я пытаюсь настроить okHttp и добавить ключ аутентификации jwt в okHttp, добавив перехватчик, для этого я создал отдельный перехватчик и добавил его в компонент кинжала, чтобы его можно было выставить где угодно .

Теперь, когда я нажимаю на логин, я получаю токен, устанавливая его с помощью метода setJwtToken () класса JwtAuthenticationInterceptor, и когда я пытаюсь использовать следующие конечные точки, я получаю ошибку 401, поскольку jwtToken приходит в ноль, даже если у меня есть установил его.

Ниже я прикрепляю свой перехватчик, код компонента и модуля привязывается к коду.

Модуль

@Provides
    @Singleton
    OkHttpClient provideOkhttpClient(Cache cache) {
        OkHttpClient.Builder client = new OkHttpClient.Builder();
        client.addInterceptor(provideHeaderInterceptor());
        client.cache(cache);
        return client.build();
    }


    @Provides
    @Singleton
    Retrofit provideRetrofit(OkHttpClient okHttpClient) {
        return new Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl(mBaseUrl)
                .client(okHttpClient)
                .build();
    }

    @Provides
    @Singleton
    JwtAuthenticationInterceptor provideHeaderInterceptor(){
        return new JwtAuthenticationInterceptor();
    }

Компонент

@Component(modules = {AppModule.class, ApiModule.class, StorageModule.class})
@Singleton
public interface NetComponent {
    Retrofit retrofit();
    OkHttpClient okHttpClient();
    SharedPreferences sharedPreferences();
    Gson gson();
    Cache cache();
    KRITILog log();
    JwtAuthenticationInterceptor headerInterceptor();
}

JwtAuthenticationInterceptor.java

@Singleton
public class JwtAuthenticationInterceptor implements Interceptor {
    private String jwtToken;

    @Inject
    public JwtAuthenticationInterceptor() { }

    public void setJwtToken(String jwtToken) {
        this.jwtToken = jwtToken;
    }

    @Override
    public Response intercept(Chain chain) throws IOException {
        Request original = chain.request();

        Request.Builder builder = original.newBuilder()
                .header("Authorization","Bearer " +jwtToken);
                        //String.format("Bearer %s", jwtToken));

        Request request = builder.build();
        return chain.proceed(request);
    }
}

1 Ответ

0 голосов
/ 13 ноября 2018

проблема в этой строке

client.addInterceptor(provideHeaderInterceptor());

там вы создаете новый экземпляр JwtAuthenticationInterceptor, отличный от предоставленного кинжалом. JwtAuthenticationInterceptor должно быть зависимостью этого метода. Например,

@Provides
@Singleton
OkHttpClient provideOkhttpClient(Cache cache, JwtAuthenticationInterceptor interceptor) {
    OkHttpClient.Builder client = new OkHttpClient.Builder();
    client.addInterceptor(interceptor);
    client.cache(cache);
    return client.build();
}
...