首页 理论教育 实现用户管理模块:基于云计算的应用开发实践

实现用户管理模块:基于云计算的应用开发实践

时间:2023-11-20 理论教育 版权反馈
【摘要】:所以需要使用Java EE技术并结合JPA开发一个简单的用户管理模块,这个模块可以较容易地在不同的云计算平台上部署。相对于MD5而言,SHA仍然是公认的安全加密算法,较MD5更为安全。图5-8 使用SHA算法验证用户登录Java提供了SHA算法的实现,我们可以使用该算法编写加密工具类,如代码清单5-11所示。

实现用户管理模块:基于云计算的应用开发实践

众所周知,当应用程序需要在公网被访问时,一定要注意它的安全问题。而提供一个登录界面,让有权限的用户访问应用程序则是一种常见的实现方式。

针对不同的云计算平台,可以有不同的选择。比如在GAE中提供Google账户服务。可以使用此类服务进行用户验证(请参考4.2.4节)。使用已有账户服务的好处是,用户可以使用已有的账户登录系统,其认证的安全性由服务提供者保证,而且对开发者来说开发工作量较小。缺点在于账户服务一般由特定的云计算提供商提供,基于账户服务开发的应用很难直接迁移到其他云计算平台中运行。

所以需要使用Java EE技术并结合JPA开发一个简单的用户管理模块,这个模块可以较容易地在不同的云计算平台上部署。

1.用户对象实现

该系统的用户管理模块暂时只包含验证用户的功能以及一个用户登录界面。故对于用户对象我们只需要用户名及密码即可。由于使用JPA标准操作数据库,所以能很方便地在Us-er类中定义,如代码清单5-9所示。

【代码清单5-9】

978-7-111-36687-4-Chapter05-22.jpg

在User类中,将User映射为表User。该表有两列uname和upass,分别用于存放用户名和密码。

实际插入数据后,结果如代码清单5-10所示。

【代码清单5-10】

978-7-111-36687-4-Chapter05-23.jpg

2.用户密码加密存储

上面的代码中使用了HBase的Scan命令,从查询的结果可以看到用户名与密码信息。但查询出的密码值并不是真正的用户密码,而是经过加密后的密码。这样做的好处是,当其他用户获得了数据库中的数据时,他依然不知道用户的密码是多少,从而保证了用户密码的安全性。

常见的加密算法有MD4,MD5,AES,DES,SHA,HMAC等。其中MD4,MD5等Hash算法已被破解,论文名是Collisions for Hash Functions-MD4,HAVAL-128 and RIPEMD。

本节将介绍如何使用Java语言自带的SHA算法进行加密。

(1)SHA

安全散列算法(Secure Hash Algorithm,SHA),确切地说它并不是数据加密算法,而是数据数字签名算法。它并不是为整个数据进行加密,而是对数据提取部分信息进行签名。采用该算法对不同的数据进行加密,会得到一个唯一的字符串,该字符串就像签名一样,只有该数据才可能产生这样的签名字符串。

相对于MD5而言,SHA仍然是公认的安全加密算法,较MD5更为安全。

我们可以使用SHA对用户密码进行签名,并将签名值保存在数据库中。

当用户登录时,我们再次使用SHA算法对密码进行签名,同时与数据库中的密码进行对比,如果相同就说明用户登录时所使用的密码是正确的,如图5-8所示。

978-7-111-36687-4-Chapter05-24.jpg

图5-8 使用SHA算法验证用户登录

Java提供了SHA算法的实现(package com.cloud.skater.util;),我们可以使用该算法编写加密工具类,如代码清单5-11所示。

【代码清单5-11】

978-7-111-36687-4-Chapter05-25.jpg

978-7-111-36687-4-Chapter05-26.jpg

经过上面的步骤我们已经可以加密存储数据,下面需要将数据写入到数据库中以备查询。(www.xing528.com)

(2)配置数据源

配置Hibernate DataNucleus JPA接口,首先配置persistence.xml,该文件最后将部署在war/WEB-INF/classes/META-INF/目录下。内容如代码清单5-12所示。

【代码清单5-12】

978-7-111-36687-4-Chapter05-27.jpg

978-7-111-36687-4-Chapter05-28.jpg

除此之外,我们依然需要将包含HBase服务器信息的hbase-site.xml部署在war/WEB- INF/classes/目录下(参见第3章HBase配置)。

(3)获取数据库操作对象

配置好HBaseJPA接口后,就可以通过Persistence.createEntityManagerFactory("hbase-filesharesys")来获得数据库操作对象。"hbase-filesharesys"定义在persistence.xml文件中。我们使用单态(Singleton)模式获取数据库操作对象。该模式的主要作用是保证在Java应用程序中,一个类只有一个实例存在。针对数据库的操作,一般有一个操作对象就可以满足要求。使用单态模式的好处还在于节省内存与时间。只有第一次初始化数据库实例对象时花费较长的时间,并且只占用一个实例的内存;其他时候都使用已经初始化好的数据库操作对象,如代码清单5-13所示。

【代码清单5-13】

978-7-111-36687-4-Chapter05-29.jpg

(4)写入数据

通过EMF.getInstance().createEntityManager()创建完数据库操作对象后,就可以将映射的数据库对象写入到数据库中。如代码清单5-14所示,获得User对象的加密密码并将该对象写入到数据库中。

【代码清单5-14】

978-7-111-36687-4-Chapter05-30.jpg

978-7-111-36687-4-Chapter05-31.jpg

关于如何从数据库中获得User对象查询等操作,参见光盘中sample5\FileSharingSystem\src\com\cloud\skater\UserLogin.java。

下面的工作就是利用之前开发的工具,使用JavaEE技术制作用户登录界面。

在这里再次用到了第1章提到过的MVC模式,数据存储(Model),用户登录页面(View)和Servlet(Controller)。

控制器Servlet的代码如代码清单5-15所示。

【代码清单5-15】

978-7-111-36687-4-Chapter05-32.jpg

978-7-111-36687-4-Chapter05-33.jpg

登录页面代码如代码清单5-16所示。

【代码清单5-16】

978-7-111-36687-4-Chapter05-34.jpg

978-7-111-36687-4-Chapter05-35.jpg

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈