本发明基于互联网门店系统平台,特别涉及一种基于andorid实现https安全请求的方法。
背景技术:
早期的网络大都采用的是http传输,而http协议是没有加密的明文传输协议,如果app采用http传输数据,则会泄露传输内容,可能被中间人劫持,修改传输的内容。最典型的apphttp通信就是被运营商劫持修改,插入广告。
如今,各大厂商都意识到这个问题,因此,https也就应运而生。https是httpoverssl/tls,http是应用层协议,tcp是传输层协议,在应用层和传输层之间,增加了一个安全套接层ssl/tls,完美解决了http传输不安全的问题。
本发明在以android为平台的基础上,将项目中导入的ssl证书转化为数据流,再通过certificatefactory工厂类将其转化为socketfactory对象,设值到okhttpclient对象中,当使用post方法请求服务器时,自动验证网络安全,从而解决了在android中使用http请求不安全的问题。
技术实现要素:
本发明解决的技术问题在于提供一种基于andorid实现https安全请求的方法;本发明实现了app使用https协议请求网络更加安全的方法,解决了http协议不安全的问题。
本发明解决上述技术问题的技术方案是:
一、在项目中引入请求网络所需的jar包以及配置权限信息;二、创建raw文件夹,导入证书;三、创建baseactivity,覆写创建方法;四、定义数据流,在创建方法中初始化;五、创建网络工具类,初始化okhttpclient,添加ssl验证;六、创建事件类,用来解析获取结果;七、实现post方法;八、请求后通过回调函数获取结果信息,封装到event对象中并使用eventbus进行推送;九、在activity中使用线程方法接收请求结果。
所述的方法具体包括如下步骤:
步骤一、引入请求网络所需的jar包,所需的jar包有:okhttp:2.0.0、eventbus:2.2.1以及okhttp-urlconnection:2.0.0等。
步骤二、配置权限信息,具体所需权限有:permission.access_wifi_state、permission.access_network_state、permission.internet等。
步骤三、在res文件夹下创建raw文件夹,导入证书。
步骤四、创建baseactivity,覆写oncreate方法。
步骤五、定义数据流,在oncreate方法中初始化,所述的数据流主要通过getresources().openrawresource(r.raw.xinye)方法从raw文件夹中获取。
步骤六、创建网络工具类,初始化okhttpclient,添加ssl验证;所述具体实现过程如下:
(1)在工具类中定义静态okhttpclient对象mokhttpclient;
(2)创建getsocketfactory(inputstreaminputstream)方法,获取sslsocketfactoryssl协议的安全套接字工厂类对象;
(3)使用单例模式初始化mokhttpclient,将上述方法所获取的对象设值到mokhttpclient对象中;
(4)在baseactivity中的oncreate方法中初始化;如:
okhttpclientmokhttpclient=apphttpclient.getinstance(inputstream)。
步骤七、实现post方法,所述的post方法实现具体步骤如下:
(1)所需的参数有:inputstream输入流、string类型的url、map类型的键值对参数、callback回调等;
(2)通过单例方法getinstance(inputstream)获取okhttpclient对象client;
(3)创建formencodingbuilder对象,将map参数中的值添加到对象中,然后通过formencodingbuilder.build()方法创建requestbody对象;
(4)通过newrequest.builder().url(url).post(requestbody).build()方法创建request对象;
(5)通过client.newcall(request).enqueue(callback)方法发起post请求。
步骤八、请求后通过回调函数获取结果信息,封装到event对象中并使用eventbus进行推送,所述的使用回调函数返回结果实现如下:
第一步,创建callback接口;
第二步,在接口中创建onfailure(requestrequest,ioexceptione)与onresponse(responseresponse)方法;
第三步,在调用post方法中实现回调接口中的onfailure方法与onresponse方法,分别将请求后的结果添加到event对象中,最后使用eventbus.getdefault().post(event)推送到activity或fragment中;
步骤九、在activity中使用线程方法接收请求结果。
本发明的有益效果:以android为平台的基础上,将项目中导入的ssl证书转化为数据流,再通过certificatefactory工厂类将其转化为socketfactory对象,设值到okhttpclient对象中,当使用post方法请求服务器时,自动验证网络安全,从而实现了使用https协议请求网络更加安全的目的。有效地解决了在android中使用http请求不安全的问题。
附图说明
下面结合附图对本发明进一步说明:
图1为本发明的流程图。
具体实施方式
如图1所示,本发明采用如下步骤:
步骤一、引入请求网络所需的jar包,所需的jar包有:okhttp:2.0.0、eventbus:2.2.1以及okhttp-urlconnection:2.0.0等。
步骤二、配置权限信息,具体所需权限有:permission.access_wifi_state、permission.access_network_state、permission.internet等。
步骤三、在res文件夹下创建raw文件夹,导入证书。
步骤四、创建baseactivity,覆写oncreate方法。
步骤五、定义数据流,在oncreate方法中初始化,所述的数据流主要通过getresources().openrawresource(r.raw.xinye)方法从raw文件夹中获取。
步骤六、创建网络工具类,初始化okhttpclient,添加ssl验证;所述具体实现过程如下:
(1)在工具类中定义静态okhttpclient对象mokhttpclient;
(2)创建getsocketfactory(inputstreaminputstream)方法,获取sslsocketfactoryssl协议的安全套接字工厂类对象;如:
publicstaticsslsocketfactorygetsocketfactory(inputstreaminputstream){
try{
certificatefactorycertificatefactory=certificatefactory.getinstance("x.509");
keystorekeystore=keystore.getinstance(keystore.getdefaulttype());
keystore.load(null);
keystore.setcertificateentry("0",certificatefactory.generatecertificate(inputstream));
if(inputstream!=null){
inputstream.close();
}
sslcontextsslcontext=sslcontext.getinstance("tls");
returnsslcontext.getsocketfactory();
}catch(exceptione){
e.printstacktrace();
}
returnnull;
}
(3)使用单例模式初始化mokhttpclient,将上述方法所获取的对象设值到mokhttpclient对象中;如:
publicstaticokhttpclientgetinstance(inputstreaminputstream){
if(mokhttpclient==null){
mokhttpclient=newokhttpclient();
mokhttpclient.setsslsocketfactory(getsocketfactory(inputstream));
}
returnmokhttpclient;
}
(4)在baseactivity中的oncreate方法中初始化;如:
okhttpclientmokhttpclient=apphttpclient.getinstance(inputstream)。
步骤七、实现post方法,所述的post方法实现具体步骤如下:
(1)所需的参数有:inputstream输入流、string类型的url、map类型的键值对参数、callback回调等;
(2)通过单例方法getinstance(inputstream)获取okhttpclient对象client;
(3)创建formencodingbuilder对象,将map参数中的值添加到对象中,然后通过formencodingbuilder.build()方法创建requestbody对象;
(4)通过newrequest.builder().url(url).post(requestbody).build()方法创建request对象;
(5)通过client.newcall(request).enqueue(callback)方法发起post请求。
步骤八、请求后通过回调函数获取结果信息,封装到event对象中并使用eventbus进行推送,所述的使用回调函数返回结果实现如下:
第一步,创建callback接口;
第二步,在接口中创建onfailure(requestrequest,ioexceptione)与onresponse(responseresponse)方法;
第三步,在调用post方法中实现回调接口中的onfailure方法与onresponse方法,分别将请求后的结果添加到event对象中,最后使用eventbus.getdefault().post(event)推送到activity或fragment中;如:
publicstaticvoidpost(inputstreaminputstream,stringurl,map<string,string>params,finaleventevent){
post(inputstream,url,params,newcallback(){
@override
publicvoidonfailure(requestrequest,ioexceptione){event.setresulttype(basehttpevent.request_failure);
eventbus.getdefault().post(event);
}
@override
publicvoidonresponse(responseresponse)throwsioexception{
stringresultjson=response.body().string();
event.setresultjson(resultjson);
event.setresulttype(basehttpevent.request_success);
//在activity里发送一个更改界面的事件信号
eventbus.getdefault().post(event);
}
});
}。
步骤九、在activity中使用线程方法接收请求结果,如:
publicvoidoneventmainthread(ordereventevent){
if(event.isrequestsuccess()){
orderentitydata=event.getdata();
}
}。
1.一种基于andorid实现https安全请求的方法,其特征在于:一、在项目中引入请求网络所需的jar包以及配置权限信息;二、创建raw文件夹,导入证书;三、创建baseactivity,覆写创建方法;四、定义数据流,在创建方法中初始化;五、创建网络工具类,初始化okhttpclient,添加ssl验证;六、创建事件类,用来解析获取结果;七、实现post方法;八、请求后通过回调函数获取结果信息,封装到event对象中并使用eventbus进行推送;九、在activity中使用线程方法接收请求结果。
2.根据权利要求1所述的一种基于andorid实现https安全请求的方法,其特征在于:引入请求网络所需的jar包,所需的jar包有:okhttp:2.0.0、eventbus:2.2.1以及okhttp-urlconnection:2.0.0等。
3.根据权利要求1所述的一种基于andorid实现https安全请求的方法,其特征在于:配置权限信息,具体所需权限有:permission.access_wifi_state、permission.access_network_state、permission.internet等。
4.根据权利要求4所述的一种基于andorid实现https安全请求的方法,其特征在于:在res文件夹下创建raw文件夹,导入证书。
5.根据权利要求4所述的一种基于andorid实现https安全请求的方法,其特征在于:创建baseactivity,覆写oncreate方法。
6.根据权利要求1所述的一种基于andorid实现https安全请求的方法,其特征在于:定义数据流,在oncreate方法中初始化,所述的数据流主要通过getresources().openrawresource(r.raw.xinye)方法从raw文件夹中获取。
7.根据权利要求1所述的一种基于andorid实现https安全请求的方法,其特征在于:创建网络工具类,初始化okhttpclient,添加ssl验证;所述具体实现过程如下:
第一步,在工具类中定义静态okhttpclient对象mokhttpclient;
第二步,创建getsocketfactory(inputstreaminputstream)方法,获取sslsocketfactoryssl协议的安全套接字工厂类对象;
第三步,使用单例模式初始化mokhttpclient,将上述方法所获取的对象设值到mokhttpclient对象中;
第四步,在baseactivity中的oncreate方法中初始化。
8.根据权利要求1所述的一种基于andorid实现https安全请求的方法,其特征在于:实现post方法,所述的post方法实现具体步骤如下:
第一步,所需的参数有:inputstream输入流、string类型的url、map类型的键值对参数、callback回调等;
第二步,通过单例方法getinstance(inputstream)获取okhttpclient对象client;
第三步,创建formencodingbuilder对象,将map参数中的值添加到对象中,然后通过formencodingbuilder.build()方法创建requestbody对象;
第四步,通过newrequest.builder().url(url).post(requestbody).build()方法创建request对象;
第五步,通过client.newcall(request).enqueue(callback)方法发起post请求。
9.根据权利要求1所述的一种基于andorid实现https安全请求的方法,其特征在于:请求后通过回调函数获取结果信息,封装到event对象中并使用eventbus进行推送,所述的使用回调函数返回结果实现如下:
第一步,创建callback接口;
第二步,在接口中创建onfailure(requestrequest,ioexceptione)与onresponse(responseresponse)方法;
第三步,在调用post方法中实现回调接口中的onfailure方法与onresponse方法,分别将请求后的结果添加到event对象中,最后使用eventbus.getdefault().post(event)推送到activity或fragment中。
10.根据权利要求1所述的一种基于andorid实现https安全请求的方法,其特征在于:在activity中使用线程方法接收请求结果,所述的线程方法如下:publicvoidoneventmainthread(eventevent){}。
技术总结