OkHttp身份验证器

没消息

我正在使用OkHttp3Retrofit2需要为所有请求替换一个令牌。我写了一个TokenAuthentificator类:

   public class TokenAuthenticator implements Authenticator {

        @Override
        public Request authenticate(Route route, okhttp3.Response response) throws IOException {
            return response.request().newBuilder()
                    .header(Const.Url.COOKIE, preferenceHelper.getToken())
                    .build();
        }
    }

并使用 Retrofit 初始化它:

@Inject
public RestApi(PreferenceHelper preferenceHelper) {
    TokenAuthenticator authenticator = new TokenAuthenticator();

    this.preferenceHelper = preferenceHelper;
    HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
    interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

    OkHttpClient client = new OkHttpClient.Builder()
            .addInterceptor(interceptor)
            .authenticator(authenticator)
            .connectTimeout(10, TimeUnit.SECONDS)
            .writeTimeout(10, TimeUnit.SECONDS)
            .readTimeout(30, TimeUnit.SECONDS)
            .build();


    Retrofit retrofit = new Retrofit.Builder().baseUrl(Const.Url.API)
            .client(client)
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
            .build();
    user = retrofit.create(User.class);
}

但是,请求中的标头仍未被替换。可能是什么问题呢?

请求示例:

 @Multipart
    @POST("user_set_photo")
    Observable<Response<TechmasResponse>> setPhoto(@Part("PERSONAL_PHOTO\"; filename=\"image.png\" ") RequestBody file);

在活动/片段中,如下所示:

Subscription request = restApi.user.setPhoto(body)
                .compose(RxUtils.applySchedulers())
                .subscribe(this::successAddPhoto, this::handleError);
        unSubscribeOnDestroy(request);
亚历克斯·舒托夫

将令牌存储在 SharedPreerences 中并从 Interceptor 加载它:

public class TokenAppendingHeaderInterceptor implements Interceptor {

    private TokenStorage tokenStorage;

    public TokenAppendingHeaderInterceptor(TokenStorage tokenStorage){
        this.tokenStorage = tokenStorage;
    }

    @Override
    public Response intercept(Chain chain) throws IOException {
        Request request = chain.request();
        String token = tokenStorage.getToken();
        Request newRequest = request.newBuilder()
                .addHeader("Accept", "application/json")
                .addHeader("sessionId", token)
                .addHeader("application-type", "REST")
                .build();
        return chain.proceed(newRequest);
    }
}

它对我有用

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Okhttp中处理身份验证

来自分类Dev

OKHttp身份验证器不能与翻新一起使用暂停乐趣

来自分类Dev

OkHttp添加基本身份验证标头

来自分类常见问题

.NET Core身份服务器4身份验证VS身份身份验证

来自分类Dev

身份验证器响应码400

来自分类Dev

Laravel 5身份验证器

来自分类Dev

Jboss 7自己的身份验证器

来自分类Dev

Couchbase Facebook拉身份验证器

来自分类Dev

Keycloak服务器身份验证

来自分类Dev

Laravel 5身份验证器

来自分类Dev

HttpsURLConnection 身份验证器错误

来自分类Dev

组合fos_oauth身份验证器和单键身份验证器

来自分类Dev

身份服务器 4 身份验证

来自分类Dev

Ember简单身份验证自定义身份验证器

来自分类Dev

NTLM身份验证-身份验证后,服务器是否发布了任何令牌?

来自分类常见问题

服务器在SASL身份验证步骤上返回错误:身份验证失败

来自分类Dev

无论服务器身份验证如何,都对Git存储库进行身份验证

来自分类Dev

Android登录-帐户身份验证器与手动身份验证

来自分类Dev

为什么Rails身份验证控制器路由复制身份验证参数?

来自分类Dev

无法使用Windows身份验证向SMTP服务器进行身份验证

来自分类Dev

身份验证筛选器无法正确识别身份验证

来自分类Dev

使用Google身份验证在SSH服务器上进行两因素身份验证

来自分类Dev

Mifare身份验证

来自分类Dev

Mifare身份验证

来自分类Dev

Scalatra身份验证

来自分类Dev

模拟身份验证

来自分类Dev

jqgrid /身份验证

来自分类Dev

身份验证问题

来自分类Dev

NSURLSession身份验证