Retrofit-Android上的token验证
来源:互联网 发布:js 二进制转字符串 编辑:程序博客网 时间:2024/05/20 14:15
这篇文章是一个除了前面的帖子使用retrofit进行基本的身份验证和使用基于OAuth的基本APIS。我们将讨论的话题token认证从一个Android应用到任何网络服务或API支持这种认证。
Integrate Token Authentication
如果你读前面的帖子关于使用retrofit的身份验证,你会猜到我们要怎么做:扩展ServiceGenerator类和集成方法处理token认证。让我们直接与第二个扩展ServiceGenerator createService方法:
Retrofit 1.9
public class ServiceGenerator {
public static final String API_BASE_URL = "https://your.api-base.url";
private static RestAdapter.Builder builder = new RestAdapter.Builder()
.setEndpoint(API_BASE_URL)
.setClient(new OkClient(new OkHttpClient()));
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) {
builder.setRequestInterceptor(new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
request.addHeader("Authorization", authToken);
}
});
}
RestAdapter adapter = builder.build();
return adapter.create(serviceClass);
}
}
Retrofit 2
public class ServiceGenerator {
public static final String API_BASE_URL = "https://your.api-base.url";
private static OkHttpClient httpClient = new OkHttpClient();
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.interceptors().clear();
httpClient.interceptors().add(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);
}
});
}
Retrofit retrofit = builder.client(httpClient).build();
return retrofit.create(serviceClass);
}
}
正如你所看到的,我们通过身份验证标记作为一个字符串变量方法,使用RequestInterceptor(Interceptor in Retrofit 2)设置HTTP标头字段进行授权。如果你使用另一个HTTP报头字段为您的身份验证token,上面的代码调整或创建一个新的方法处理所需的功能。
从现在开始,每一个HTTP客户端创建该方法集成了令牌授权头字段的值,并自动传递token值与任何请求API端点。
Example Usage
让我们创建一个例子,看看一些代码。下面的UserService接口声明一个方法叫me()。这个示例方法返回一个用户对象从API创建响应。
Retrofit 1.9
public interface UserService {
@POST("/me")
User me();
}
Retrofit 2
public interface UserService {
@POST("/me")
Call<User> me();
}
要特殊照顾调用API等待在终点HTTP任何要求://your.api-base.url/me并要求身份验证以获取用户数据的响应。现在,让我们创建一个用户服务对象,做实际的请求 .
Retrofit 1.9
UserService userService =
ServiceGenerator.create(UserService.class, "auth-token");
User user = userService.me();
Retrofit 2
UserService userService =
ServiceGenerator.create(UserService.class, "auth-token");
Call<User> call = userService.me();
User user = call.execute().body();
这段代码演示了如何使用了类。当然,你必须要经过实际验证token值ServiceGenerator方法。
0 0
- Retrofit-Android上的token验证
- Retrofit在客户端保持Cookie(服务器的Token验证)
- Retrofit学习教程(3)-Token验证
- ThinkPhp的token验证机制。
- 坑爹的token验证
- 关于token验证的了解
- Token验证失败的解决方法
- Token验证失败的解决方法
- Token验证失败的解决方法
- 基于jwt的token验证
- RxJava+Retrofit实现全局过期token自动刷新的实践
- 基于retrofit网络请求token过期的处理逻辑
- android的token
- Android Token的使用
- Android Token的作用
- 【Android】Retrofit的使用(1)-Retrofit介绍
- Token验证
- Token验证
- qmlRegisterType 的功能以及用法
- Ubuntu 截屏 netscope名字
- Java: 用Map 和 多态 替换臃肿的if-else结构--section 2
- Java排序算法之选择排序
- UCOS-II学习记录
- Retrofit-Android上的token验证
- TensorBoard学习
- C语言中的变长数组 data[0]
- 第12节 C语言三大结构之循环结构
- 树莓派pi3 ssh远程连接问题
- 一些常用的图像处理网站
- cesium模拟水系效果
- sbt安装
- 神注释大全