版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
移动OA系统的初步实现构想——与服务器交互的方法探讨以与及安全设计和权限管理Android客户端与服务器的交互方法客户端框架要实现Android手机客户端与PC服务器的交互,至少需遵循以下三个原则:跨平台、传输数据格式标准和交互方便。对于移动端,按功能可将其划分为界面表示层、服务层以及数据持久层等三个部分。界面表示层接收来自用户的操作请求,并将请求转发给中间服务层处理,在服务层完成请求返回结果后,界面表示层则将处理结果展示给系统用户。服务层在整个系统中起着桥梁的作用,其接收到来自界面层的请求后,需通过与数据持久层的交互来实现请求的处理,并将处理结果返回给界面表示层,以便系统用户知晓处理结果。数据持久层实现与Android内嵌数据库SQLite的交互,以便存储应用的状态信息和在终端大容量存储设备中读写文件(可利用Android提供的类SQLiteDatabase和SQLiteOpenHelper对SQLite数据库进行管理与操作)。客户端的框架图如图1所示。图1客户端的框架客户端与服务器交互的实现原理TCP/IP协议与HTTP协议的定义要实现客户端与服务器的连接,首先要解决以下两个问题:客户端和服务器之间通过什么来连接这种连接方式如何实现客户端与服务器通过Internet连接,而连接需要遵循以下通信协议:TCP/IP(TransmissionControlProtocol/InternetProtocol)协议传输控制/网间协议,它也是最底层的协议,其它的方式必须要通过它,实现这种协议需实现socket编程,用来上传一些比较大的文件、视频,进行断点续传的操作。FTP协议(略)HTTP(HypertextTransferProtocol)协议超文本传输协议,也是在工作中最常用的,是建立在TCP/IP基础上实现的,属于应用层。客户端连接服务器的实现原理客户端与服务器交互的实现原理如图2所示。图2客户端与服务器交互的原理从上图中可总结出客户端与服务器连接的大致方法:用户在浏览器输入网址(也可能通过Android各种控件发送HTTP请求),通过http协议发出去,网址经过DNS域名解析,解析成指定的ip地址,并在80端口上监听用户的请求。服务器监听到请求之后,会以三种方式返回给客户端:HTML、XML、JSON,即分别以HTML代码内容返回、以XML字符串的形式返回和以JSON(JavaScriptObjectNotation)对象形式返回。对于Android客户端,一般使用XML或JSON数据解析,在对数据大小及传输速度有要求时采用后者更合适。使用HttpClient发送HTTP请求并接收响应在Android上发送Http请求一般有两种方式:HttpClient和HttpURLConnection。HttpClient是开源框架,封装了访问http的请求头、参数、内容体和响应等等,使用较为简单方便;HttpURLConnection是java的标准类,没有进行封装,使用不方便,但利于开发者根据自己的需要进行各种扩展。下面重点对HttpClient进行介绍。AndroidSDK已经成功集成了HttpClient,在Android项目中可以直接使用HttpClient来向Web站点提交请求以及接收响应。HttpClient实际上是一个Interface类型,其已知的三个实现类是:AbstractHttpClient,AndroidHttpClient,DefaultHttpClient,可见有一个专门为Android应用准备的实现类AndroidHttpClient,当然使用常规的DefaultHttpClient也可以实现功能。用HttpClient发送请求、接收响应只需要五步即可:创建代表客户端的HttpClient对象创建代表请求的对象如果需要发送GET请求,则创建HttpGet对象,如果需要发送POST请求,则创建HttpPost对象。调用HttpClient对象的方法execute(HttpUriRequestrequest)发送请求执行该方法后,将获得服务器返回的HttpResponse对象。服务器发回的数据就在这个HttpResponse响应当中。调用HttpResponse的对应方法获取服务器的响应头、响应内容等。检查响应状态是否正常服务器发给客户端的响应,有一个响应码:响应码为200,正常;响应码为404,客户端错误;响应码为505,服务器端错误。获得响应对象当中的数据 下面以一个Demo(分别采用了GET/POST方式)来演示HTTPClient的使用方法:要求在Android手机输入用户名称和密码,发送给服务器,服务器接收到请求后,将名称和密码返回客户端(为了测试,在计算机上安装了Tomcat服务器,配置方法不再赘述)。利用HTTPClient(GET方式)与服务器交互的代码如图3所示。图3客户端发送请求(GET)并接收服务器响应在实例化HttpClient类的对象时,此处使用的是HttpClient的其中一个实现类DefaultClient的构造方法,和使用AndroidHttpClient类的效果是一样的,只不过AndroidHttpClient类的构造方法在外部不可直接调用,只能利用newInstance方法来实例化HttpClient类的对象。Test.jsp是放置于服务器端的文件,其代码如下:<%Stringname=request.getParameter("name");Stringpwd=request.getParameter("password");%>使用Android模拟器运行,结果如下(简便起见,服务器返回的数据直接打印在catlog窗口中,图中蓝色的日志内容和即是返回的数据)。图4服务器返回数据到客户端POST方式发送请求的实现与GET方式大同小异,主要代码如下所示:图5客户端发送请求(POST)的代码截图最后,还需要注意以下几点:声明访问网络的权限在Android工程的清单文件AndroidManifest.xml中,添加代码:<uses-permissionandroid:name="android.permission.INTERNET"/>所有发送HTTP请求和接收服务器响应的代码都应放在线程中执行GET/POST方式的差异以上Demo主要为了演示GET/POST方式的实现方法,只简单地都使用两种方式来发送数据,实际上GET方式主要用于从服务器获取数据,而POST方式用于发送数据到服务器。对于发送请求的参数,GET和POST使用的方式也不同,GET方式可使用拼接字符串的方式,把参数拼接在URL结尾;POST方式需要使用setEntity(HttpEntityentity)方法来设置请求参数。两者的其余区别不再赘述。关于Android的封装类WebView实际上,Android中的WebView类封装了关于网络连接和数据发送、接收与显示的操作,使用WebView控件也能发送HTTP请求、接收服务响应、解析返回数据。XML和JSON数据格式的解析方法前文已述及,Android客户端与服务器之间主要通过XML和JSON两种格式传输数据,下面分别讨论两种数据格式的解析方式。XML数据格式与解析方法介绍在网络上传输的一般都是格式化后的数据,这种数据会有一定的结构规格和语言,当另一方收到数据消息后就可以按照相同的结构规格进行解析,从而取出需要的内容。因此,解析数据的前提条件是必须对数据格式有所了解。下面先简单介绍XML语言,然后介绍解析XML数据的几种方法,最后重点阐述使用SAX解析XML数据的方法。XML的介绍XML,即可扩展标记语言(ExtensibleMarkupLanguage),用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML是一种在Internet中传输数据的常见格式,它与HTML一样,都是SGML(标准通用标记语言)。由于XML的扩展性强,致使它需要有稳定的基础规则来支持扩展,该语法规则需要注意的是:开始和结束标签匹配。嵌套标签不能相互嵌套。区分大小写。XML的结构解析如下:节点元素属性和属性值格式如下:<标记名称属性名1="属性值1"属性名1="属性值1"……>内容</标记名称>Android中解析XML数据的主要方法Android平台最大的优势在于,上层应用基本可以利用Java编程语言开发。而Java平台支持通过许多不同的方式来使用XML,且大多数与XML相关的API已经在Android系统上得到完全支持。但因为Android移动设备的局限性,一般仅考虑使用三种方式解析XML:DOM,DocumentObjectModel,文档对象模型方式,解析完的XML将生成一个树状结构的对象。SAX,simpleAPIforXml,以事件的形式通知程序,对XML进行解析。XMLPULL,类似于SAX方式,程序以拉取的方式对XML进行解析。使用SAX解析XML数据SAX解析XML数据速度快,占用内存少,非常适合用于Android等移动设备。SAX解析XML文件采用的是事件驱动,并不需要解析完整个文档,在按内容顺序解析文档的过程中,SAX会判断当前读到的字符是否符合XML语法中的某部分,如果符合就会触发事件。所谓事件,其实就是一些回调(callback)方法,这些方法(事件)定义在ContentHandler接口。在Android中,利用SAX解析XML需要用到的类主要有:DefaultHandler和SAXParserFactory,每个类的使用方法可查API文档。使用SAX解析XML的简要步骤如下:新建一个DefaultHandler的子类MyHandler,并复写DefaultHandler中的几个特有方法,解析XML的具体工作由此类完成。实例化一个SAX解析器的工厂对象,SAXParserFactory对象,使用SAXParserFactory.newInstance()方法获取。利用SAXParserFactory.newSAXParser()获得SAX解析器对象SAXParser。实例化MyHandler类,传入需要解析的节点名称。使用SAXParser.parse()方法解析数据,传入的参数为待解析的XML流和XML解析对象。从MyHandler对象中获得解析结果。最后,展示一个使用SAX解析XML文件的Demo示例:要求将以下内容的XML文件person.xml放置于本地服务器,使用Android客户端获取其内容。<?xmlversion="1.0"encoding="UTF-8"?><persons><personid="01"><name>maoquoqing</name><age>25</age></person><personid="02"><name>csz</name><age>24</age></person></persons>先来看该Android工程的包含的类文件:图6Android工程文件根据前述步骤,下面分别说明各个类的作用和主要代码。MyHandler类继承DefaultHandler类,并复写其中的startDocument()等特有方法,解析XML文件的具体工作由此类完成,鉴于代码较长,此处不展示,具体见Android工程。HttpUtils类此自定义工具类通过URLHttpConnection(前文已提及,Android使用URLHttpConnection和HttpClient来发送HTTP请求,并介绍了HttpClient的使用方法,而下面的代码可解释如何使用URLHttpConnection)获取服务器上的XML流,SAX解析器解析文件时需要将此XML流作为参数之一,核心代码如下。图7获取服务器上的XML流的代码SaxService类在此类中实例化一个SAX解析器的工厂对象:SAXParserFactory,核心代码如下所示。图8得到SAX解析器的代码代码sParser.parse(inputStream,myHandler)表示开始解析,其中的参数myHandler代表待解析的对象,由上文的MyHandler类实例化而得到(MyHandlermyHandler=newMyHandler(nodeName)),实例化时需传入XML文件的节点名称;参数inputStream代表待解析的输入流,由上文HttpUtil类的方法getXML得到。主程序界面MainActivity在主界面中开启访问网络的线程,获取XML中的数据,代码如下:图9主界面中的程序代码将从XML中解析出的数据打印在CatLog窗口中,结果如下所示:图10解析XML得到数据JSON数据格式与解析方法介绍JSON的介绍JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。它基于JS的一个子集。JSON采用完全独立于语言的文本格式,这使得JSON成为理想的数据交换语言,易于人阅读和编写,同时也易于机器解析和生成。图11是一个关于城市空气质量的json文件内容示例:图11json文件格式示例JSON简单来说就是JS中的对象和数组,所以JSON也存在两种结构:对象、数组。JSON对象(JSONObject)JSON对象是是“‘键/值’对”的无序集合,定义在花括号“{}”内,以Key:value键值对的形式存放数据,多个键值对之间使用逗号“,”隔开,多个数据使用分号“;”隔开。JSON对象示意图如下所示。图12JSON对象示意图JSON数组(JSONArray)JSON数组是值(Value)的有序集合,定义在方括号“[]”内,以字符串的形式存放数据,值之间使用逗号“,”隔开,多个数据使用分号“;”隔开。其示意图如下面所示,而图11中键“result”对应的值正是一个JSON数组。图13JSON数组示意图JSON的解析方法android平台上一般有以下几种解析技术可供选择:Android内置的org.json包Google的开源库GSON第三方的开源库如Jackson、FastJson等下面将对利用org.json包解析JSON数据和利用GSON解析JSON数据的方法进行介绍,第三方的开源库很多就不再赘述。使用Android内置的org.json包解析JSON数据Android\o"Android知识库"平台自带了JSON解析的相关API,可以将文件、输入流中的数据转化为JSON对象,然后从对象中获取JSON保存的数据内容。图14中展示了org.json包中与处理JSON数据相关的几个类。图13org.json包中的各个类可见,Android中与解析JSON数据有关的主要有以下几个类:JSONObject此类可以看作是一个JSON对象,是系统中有关JSON定义的基本单元。关于JSON对象,前面已进行过阐述。需注意的是,JSONObject中的Value类型可包括:Boolean、JSONArray、JSONObject、Number、String或者默认值Object。JSONStringerjson文本构建类,其最大的优点在于可以减少由于格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntaxrules)创建JSONtext。JSONArray此类可以看作是一个JSON数组,关于JSON数组,前面已有阐释。同样,JSONArray中的Value类型也包括:Boolean、JSONArray、JSONObject、Number、String或者默认值Object。JSONTokenerJSON解析类JSONExceptionJSON异常类现在展示一个使用Android自带API解析JSON数据的Demo:要求在手机端发送城市名,获得从服务器返回的该城空气质量,其中,空气质量数据由“聚合数据”公司以json文件形式提供,数据格式如图11所示,数据接口API文档参见:/docs/api/id/33/aid/79。Demo包含执行查询空气质量任务的QueryTask和主界面MainActivity两个类,核心是要解决HTTP请求的发送和JSON格式数据的解析问题。QueryTask该类继承Android的AsyncTask,以便另开线程执行从服务器查询数据的任务,并复写其doInBackground(String...params)和onPostExecute(Stringresult)方法,分别在这两个方法中完成发送HTTP请求到服务器和解析从服务器发回的JSON数据的工作。doInBackground(String...params)方法发送HTTP请求并接收服务器响应,这些工作在后台执行。核心代码如下所示,可以看到,采用了前文所述的利用HttpClient发送请求的方法。因为只是查询数据,所以用的是GET方式。图14在后台发送HTTP请求并接收服务器响应onPostExecute(Stringresult)方法利用Android内置的org.json包解析从服务器发回的JSON数据,核心代码如图15所示。图15利用Android自带的API解JSON数据MainActivity在主程序界面实例化一个QueryTask类的对象,需传入的参数为当前上下文对象Context和负责显示查询结果的TextView控件,调用AsyncTask的execute方法开启线程,查询数据。图16在主线程中开启查询数据的线程最终,在模拟器上输入城市名“贵阳”,得到的结果如图16所示,服务器端存储的JSON格式数据(见图11)已被成功解析。图17解析后的空气质量数据使用开源库GSON解析JSON数据前文已介绍了使用Android内置的org.json包解析JSON格式数据的方法,之所以还要在此介绍另一种解析JSON数据的方式——使用GSON解析JSON数据,是因为其对于用jsp+servlet作服务器端,自定义JSON文件结构的情况十分方便。GSON是Google开发的JavaAPI,用于转换Java对象和JSON对象,被用来处理Java和JSON对象的转换,使用时只需将对应的jar包导入工程libs文件夹即可,jar包可到官网下载。GSON能将json文件中的JSON对象转化为自定义JAVA对象,不需要开发人员再手动编写代码,使用十分方便。例如,有一段JSON数据格式如下:{"name":"mgq","age":25},那就可以自定义一个JAVA类Person,在类中加入name和age两个属性,并使用如下代码:Gsongson=newGson();Personperson=gson.fromJson(jsonData,Person.class);即可将JSON对象自动解析为Person对象了。若解析的是JSON对象数组,则可利用GSON自己提供的反射机制Typetoken,将期望解析成的数据类型传入到fromJson()方法中,代码如下:List<Person>people=gson.fromJson(jsonData,newTypeToken<List<Person>>().getType());关于利用GSON解析JSON数据的Demo,篇幅所限,不再详述,具体见Android工程GsonJsonTest。移动OA系统的安全设计完整OA系统的安全架构一个完整OA系统(包括PC端和移动端,涵盖服务器搭建、建立数据库、数据入库、网页开发以及移动端APP开发等所有工作)的安全架构应从以下四个方面进行考虑。应用系统安全应用系统的安全是为某种或多种应用提供用户认证,数据保密,完整性以及授权和访问控制服务等,防止这些应用系统被破坏或是被非法访问,保证信息的完整性和保密性。应用系统保护的是应用程序和应用层软件的安全,这里的应用层包括FTP、EMAIL、WWW等。采用的方法包括身份认证,数据加密,授权和数据完整性检查等。网络安全网络平台的安全是保障网络的运行能够安全可靠,保证网络通信的正常进行以及保障网络上传输的信息的安全。它保护的对象是各种能够进行网络信息交换的设备,如主机、交换机、路由器等。它包括IT资源配置管理、网络环境可用性管理、网络性能管理、故障管理、功能子网划分、网络层流量控制、入侵检测与防病毒网关。数据库系统的安全数据库系统的安全针对数据库内容的访问控制、存储过程、触发器等的保护,从而保证数据库系统的完整性和保密性。数据库系统的安全包括数据库存储权限管理、存储过程、触发器设计等。权限管理安全角色权限设置用于设置每个用户在办公自动化系统中的操作权限。用户的身份通过账号(和密码)的设置来体现,而账号则和角色相对应,角色则是系统内部许许多多具体权限的组合。用户使用账号登录后,系统应根据账号调出用户所对应的角色,确定用户可选择的模块范围以及在每个模块中的操作权限。本文主要讨论的是Android客户端的安全设计,因此下文着重讨论与移动端有关的安全设计内容,如Android客户端如何安全传输用户密码、如何实现外网登陆时必须通过手机短信验证等等。权限管理安全的设计,单独放在下一章介绍。移动OA系统的安全设计移动OA系统的安全设计涵盖的内容太过广泛,下面只探讨客户端如何安全传输用户密码,如何实现外网登陆时必须通过手机短信验证两个功能的实现。实现Android客户端密码的安全传输为了实现Android客户端输入的用户密码的安全传输,考虑以下三点:弱密码检测输入密码错误达到一定次数后封锁账号或一段时间内禁止登陆采用不可逆算法加密密码前两点都非常容易实现,不再详述,但注意封锁账号后应保证系统管理员能收到消息,以便随时核实用户身份和解锁。采用不可逆算法加密用户密码,使密码的破解更为困难,能极大提高密码传输过程中的安全性。在JAVA的java.security包中封装了一些加密算法,下面贴出采用不可逆的MD5算法加密密码的代码。图18MD5算法加密密码实现外网登陆手机验证对于Android客户端,通过绑定用户手机号码,外网登录时进行短信验证码验证,可以提高应用的安全性。实现外网登陆手机验证的流程图如下图所示:图19手机短信验证流程图要实现短信验证的功能,一般需要第三方提供相应的接口,应根据接口提供商的API文档进行开发,这里不再贴出代码。Android客户端权限管理的实现权限管理设计的相关概念在OA系统在,访问控制技术是一项重要内容,它能有效的保护敏感信息、防止越权访问。要实现访问控制技术,就必须进行权限管理。以下介绍权限管理设计中的一些相关概念。权限所谓权限,实际上就是对资源的CRUD(增加、查询、修改、删除)操作,资源可以理解成系统的模块。在PC端,模块表现为一个web页面下所有的内容,在Android移动端,模块表现为一个Activity呈现的所有内容。角色角色是一个为了方便管理用户的权限而抽象出来的概念,角色是权限的集合。用户可以拥有多个角色,但是在某一次会话(session)的过程中只激活其中的若干角色。约束是指用户和角色之间建立的约束关系,譬如哪些具有互斥关系的角色不能同时授予同一个用户。权限管理权限管理包括授权、认证。授权,就是对用户赋以权限,一般由OA系统管理员来完成。系统管理员根据用户职位、用户参与的项目、用户的角色或直接指定等方法来建立用户表,在表中明确每个用户拥有的权限。认证,指的是用户在使用OA系统过程中,系统通过其登录信息,结合用户权限表确定其权限(即明确用户可以进行哪些操作)。Android客户端实现权限管理的思路对Android客户端而言,简单来说,权限管理的就是要实现对不同权限的用户展示不同的内容。在Android客户端实现权限管理的思路是:利用Android封装的一些类实现一个权限系统,通过该权限系统来实现访问控制。Android对实现权限管理功能的支持Android平台对实现权限系统可以提供以下支持:权限数据的获取系统管理员进行权限管理设计后,得到OA系统用户的权限表,权限表中包含了权限数据,存储于服务器端。Android提供的HttpClient(前文已详细阐述)可以向Web服务器发送请求并且处理响应,可以抓取到服务器端的权限数据,此外Android也提供了Webservice和Socket支持,所以Android从不同形式的服务器都可以获得数据,这为权限系统实现提供了重要的数据基础。数据共享Android提供了Application类,在一个APP中这个类的实例被共享,可以将权限数据放在其中,系统所有组件通过Application获得共享的权限数据。Application类通常要通过继承的方式使用Android的可配置性组件Android的展示层组件是Activity,这是一个容器组件,其他的组件可以通过配置文件或者硬编码的方式添加到Activity中,然后显示在移动设备界面,其中通过XML配置文件具有灵活配置、维护方便的特点。所有可视化组件都继承了View组件,View组件具有setDescription(String)方法,配置文件是android:description属性,可以将权限数据配置其中,通过这个属性中配置的数据和服务器端抓取的权限数据进行比对,决定组件的可视化Android组件的可见性属性View组件可以通过setVisibility(int)方法
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度教育机构抵押担保贷款合同3篇
- 2024年量子计算技术研发合同
- 2024年股权收购及转让协议
- 2024年鱼塘租赁与渔业生物饲料供应合同3篇
- 2024年源地信用学贷受理助你轻松上大学3篇
- 2024年铝合金门窗工程范本合同
- 2024年音乐喷泉机电安装工程分包合作协议3篇
- 2024年物业服务管理合同完整性保障协议
- 2024年项目奖金分配合同
- 2024年雇佣关系约定书:共创共赢新篇章
- 搭竹架合同范本
- Neo4j介绍及实现原理
- (2024年)(完整版)24式太极拳教案全集
- 采购管理实务(高职)全套教学课件
- 2024年教师招聘考试-小学科学教师招聘笔试历年真题荟萃含答案
- JJF 2092-2024射频与微波衰减器校准规范
- 穴位注射的机理与其在临床上的应用课件
- 学校校史编纂工作方案
- 农产品质量安全法解读
- 2024年石油石化技能考试-钻井工具装修工历年考试高频考点试题附带答案
- 人体器官有偿捐赠流程
评论
0/150
提交评论