Retrofit学习教程(3)-Token验证

写在前面: 本文是我看到Retrofit官方推荐的一个Retrofit技术文档,感觉收益匪浅,特此想把文档翻译一下,大家一起学习。
原文地址:https://futurestud.io/tutorials/retrofit-getting-started-and-android-client

本篇博文描述了如何在不使用您的Android app的API的情况下验证Token。
我们将会涉及从Android app到web service 或者支持这种验证的Api的所有token验证的话题。

集成Token验证

如果你阅读了前一篇文章,你会猜想我们将会做什么:扩展ServiceGenerator的功能,增加方法使他能够处理token验证。
OK,让我们开始拓展ServiceGenerator的第二个createService方法实现吧。
public class ServiceGenerator {

    public static final String API_BASE_URL = "https://your.api-base.url";

    private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder();

    private static Retrofit.Builder builder =
            new Retrofit.Builder()
                    .baseUrl(API_BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create());

    public static <S> S createService(Class<S> serviceClass) {
        return createService(serviceClass, null);
    }

    public static <S> S createService(Class<S> serviceClass, final String authToken) {
        if (authToken != null) {
            httpClient.addInterceptor(new Interceptor() {
                @Override
                public Response intercept(Interceptor.Chain chain) throws IOException {
                    Request original = chain.request();

                    // Request customization: add request headers
                    Request.Builder requestBuilder = original.newBuilder()
                            .header("Authorization", authToken)
                            .method(original.method(), original.body());

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

        OkHttpClient client = httpClient.build();
        Retrofit retrofit = builder.client(client).build();
        return retrofit.create(serviceClass);
    }
}

如你所见,我们将认证token作为String变量传入方法,使用RequestInterceptor来设置HTTP头部区域认证。
如果你想是同其他的http头部区域的话,要么调整上述的代码,要么创建新的方法来实现这个功能。
现在,每一个通过Authorization头部区域的token值生成的HTTP client都会在发送请求时自动向你的api端口传递token值。

举个栗子

通过一个栗子来学习一下。这个uerservice接口声明了一个me()的方法。这个方法会放回API响应创建的用户对象。

Retrofit 2

public interface UserService {  
    @POST("/me")
    Call<User> me();
}

当你在等待在端口http://your.api-base.url/me的任何请求时,你可以调用这个api,并且请求在回复中的用户信息。现在,让我们创建一个用户服务对象,并进行实际的请求。

Retrofit 2

UserService userService =  
    ServiceGenerator.create(UserService.class, "auth-token");
Call<User> call = userService.me();  
User user = call.execute().body();  

这个代码表明了如何使用现有的类。当然你必须向你的ServiceGenerator方法发送token值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值