用Retrofit发送请求中添加身份验证

用Retrofit发送请求中添加身份验证
====================
在安卓应用开发中, retrofit可以极大的方便发送http网络请求,不管是GET, POST, 还是PUT, DELETE, Retrofit使用起来都非常简单。只要稍微看一下文档,就知道怎么用。但文档没有具体说明怎么怎么发送带auth信息的请求。本文分享两个代码片段。

比如要发送这样的请求,在header中添加身份验证信息,用户名和密码:

http -a user1:user1password POST http://127.0.0.1/add/ alphago="win"

首先需要把身份验证信息用Base64转码。
``````java

// 首先要把登录信息用Base64 encode
String credentials = user1 + ":" + user1password;
final String auth_string =
        "Basic " + Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP);

``````

有两种方法可以实现,方法一是直接添加header信息,方法二是使用拦截器
####方法一
在请求的头中添加的,在api接口定义时添加,使用Header decorator.
‘‘‘ java

public interface apiInterface{
    @POST("add/")
    call<User> authUser(@Header("Authorization") String auth);
}

apiInterfaceService.addNew(auth_string);

‘‘‘

####方法二
通过OkHttpClient.Builder的addIntercepoter添加Interceptor, 在request中添加头文件信息,通过okhttpclient添加到retrofit,

‘‘‘ java

private static Retrofit.Builder retrofitBuilder =            new Retrofit.Builder()                    .baseUrl(BASE_URL)                    .addConverterFactory(GsonConverterFactory.create());    

private static OkHttpClient.Builder httpClientBuilder = new OkHttpClient.Builder();
httpClientBuilder.addInterceptor(new Interceptor() {
                @Override
                public Response intercept(Interceptor.Chain chain) throws IOException {
                    Request original = chain.request();

                    Request.Builder requestBuilder = original.newBuilder()
                        .header("Authorization", auth_string)
                        .header("Accept", "application/json")
                        .method(original.method(), original.body());

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

OkHttpClient client = httpClientBuilder.build();
retrofitBuilder.client(client).build();

‘‘‘

时间: 2024-12-28 14:22:57

用Retrofit发送请求中添加身份验证的相关文章

nancy中的身份验证

在nancy中,身份验证分为basic ,form ,token,stateless几种,basic和form这里不说了,其中如果是使用cookie来保存身份的, 需要注意的是:cookie有大小的限制,所以不能用来保存超过4k的信息,而且有一些js插件也要用的cookie,虽然html5好像多了.但是还是要注意一下.因为之前看到文章有的人网站有时候登陆出现问题,就是因为用户信息太大导致的. 这里说的是token的验证. ITokenizer 这个是定义token的接口,Tokenizer是它的

HTTP 请求未经客户端身份验证方案“Anonymous”授权。从服务器收到的身份验证标头为“Negotiate,NTLM”

转自:http://www.cnblogs.com/geqinggao/p/3270499.html 近来项目需要Web Service验证授权,一般有两种解决方案: 1.通过通过SOAP Header身份验证. 2.通过集成windows身份验证. 今天我就尝试了已第二种方式进行授权,首先发布Web Service到IIS,然后选择身份验证,启用Windows身份验证,禁用匿名身份验证 发布好了Web Servive就要在Client端调用了,我用的是VS2008,在client端项目引用中右

初识Identity并添加身份验证管理页面

目录 初识Identity并添加身份验证管理页面 前言 什么是ASP.NET Core Identity 创建带有身份验证的WebApp 尝试运行 检查解决方案中的项目文件 发现问题 原因 解决问题 @ 初识Identity并添加身份验证管理页面 前言 在使用ASP.NET Core2.2创建WebApp这篇教程中,我们使用dotnet new命令创建了一个没有身份验证管理的WebApp,通常情况下是无法满足我们对敏感页面控制的要求,典型的安全使用场景就是后台管理. 在这一篇中,我们将通过命令尝

为MongoDB添加身份验证

MongoDB 默认没有开户身份验证,除非不开放外网访问,否则这种模式极不安全,现纪录添加身份验证步骤如下: 配置创建用户的时候,需要关闭: #security:##副本集之间通信用到的认证文件# keyFile: /home/soft/mongodb-linux-x86_64-rhel62-3.4.2-shard2/mongo-key# clusterAuthMode: "keyFile"##开启身份验证# authorization: "enabled" 因为你

在Django中定制身份验证

在Django中定制身份验证 Django附带的认证对于大多数常见情况来说已经足够了,但您可能需要通过开箱即用的默认设置才能满足需求. 要为您的项目定制身份验证,需要了解提供的系统的哪些点可扩展或可替换. 身份验证后端为用户模型存储的用户名和密码需要针对与Django默认不同的服务进行身份验证时提供了一个可扩展的系统. 您可以给您的模型定制可以通过Django的授权系统进行检查的权限. 您可以扩展默认的用户模型,或者替换完全自定义的模型. 其他验证来源 您可能有时需要挂接到另一个身份验证来源 -

sqlserver 2012 IDE中 Windows身份验证连接服务器报错 ,Login failed for user &#39;xxx\Administrator&#39;. 原因: 找不到与提供的名称匹配的登录名。

问题描述: 本地装了两个实例,一个是SQLEXPRESS,可以正常操作.但是另一个开发常用的实例MSSQLSERVER却连Windows身份验证都报错,报的错误也是很奇葩,怎么会找不到Administrator那,我登录计算机进来就用的这个账号. 详细错误如下: 无法连接到 xxx.===================================用户 'xxx\Administrator' 登录失败. (.Net SqlClient Data Provider)--------------

AngularJS中的身份验证

欢迎大家指导与讨论 : )  一.  身份验证的意义    首先呢,网络应用的身份验证的意图在于:保护网站中的重要资源.基于某些原因这些资源并不能公开,比如付费资源(交过钱的用户才能上的网络课程),或者一些管理功能.  二. 1. 客户端身份验证——保护API访问资源  二. 2. 客户端身份验证——使用路由定义受保护资源 首先我们需要四样工具.1. angular常量constant. 2. $routerProvider配置为每个路由配置权限. 3. 创建一个能操作cookie并判断是否有权

cas+shiro实现不时时的去请求cas进行身份验证

cas+shiro不进行时时去cas验证身份信息,需要用shiro在当前系统有一份完整的认证机构. 那么有一个问题,什么时候去cas校验信息,目前的配置方式: cas系统设置默认的浏览器session存活时间,当前系统的session存活时间为30分钟,那么当当前系统身份验证失败是,去cas校验. 这里涉及到一个非常重要的节点,就是shiro框架内部是怎么进行cas校验的呢,请看代码: org.apache.shiro.web.filter.AccessControlFilterd还是所有默认验

EXCHANGE客户端访问服务器(CAS)中的身份验证方式

在部署完毕exchange后系统会自动建立IIS服务来响应相应的请求.客户端访问服务器(以下简称CAS)实质上是一台IIS服务器,在服务器中部署一套名为"Default web site"的站点来完成OWA.ecp.activesync.outlookanywhere.autodiscover等应用的响应. tips:Default web site 站点对应的是CAS服务器角色Exchange back end 站点对应的是邮箱服务器角色 如果想改变身份验证方式,启动IIS管理器,找