用户重置密码的流程设计如下:
1、用户忘记密码,请求重置密码;
2、检测用户是否在72小时内请求过重置密码,若是,给出提示消息,中止;否则继续;
3、系统发一封包括用户ID和随机产生的6位Token到用户注册时留下的信箱,同时记下发送邮件的时间;
4、系统每隔1小时检测取回密码的用户的邮件发送时间,如果没有超过72小时,则继续检测;如果超过72小时,则删除用户重置密码的记录,用户需要重新请求发送密码;
5、用户收到重置密码的邮件,点击重置密码的链接,登录到重置密码的页面,用户输入新密码两遍;
6、如果用户在重置密码页面输入的用户ID和Token都正确并且两次新密码一致,则系统接受新密码,并经MD5加密后,存入数据库,新密码生效,引导用户转往用户登录页面,同时,删除用户重置密码的记录;
7、如果用户在重置密码页面输入的用户ID和Token有误或两次密码不一致或者密码字符非法,返回重置密码的页面,提示用户错误和重新输入新密码,直到用户输入正确或取消重置密码的过程;
在分析了学习日记重置密码流程后,画出了用户重置密码用例的活动图后(尝试用ArgoUML0.18.1建模,模型地址:http://learndiary.tigris.org/source/browse/*checkout*/learndiary/old/documentation/login/design/resetPsd1.zargo,活动图地址(gif格式):http://learndiary.tigris.org/source/browse/learndiary/old/documentation/login/design/resetPsd1ActivityDiagram.gif?rev=1.1&view=markup),下面接着对其中涉及的对象实体作一检查:
1、用户:重置密码的用户;
2、邮件:用户重置密码的链接(包括:用户ID和取回密码的标志码)的邮件;
3、邮件发送者:发送邮件的对象;
4、用户重置密码的数据:保存用户ID、取回密码的标志码、发送重置密码邮件的时间的信息;
5、用户重置密码的数据保管者:维护用户ID、取回密码的标志码、发送重置密码邮件的时间的信息的保管者;
6、重置密码数据有效期限检查者:每隔一定时间间隔(如1小时)检查一次重置密码的数据是否有效,无效了就通知数据保管者抛弃数据;
在上面建模的基础上,我继续对UML建模进行细化,并且添加了:类图。我将进行完善这个模型的设计。
模型的下载地址是:
The main diagrams are:
http://www.learndiary.com/pictures/loginDesign/resetPsdUseCaseDiagram2.gif ,
http://www.learndiary.com/pictures/loginDesign/resetPsdClassDiagram2.gif ,
http://www.learndiary.com/pictures/loginDesign/resetPsdActivityDiagram2.gif ,
and,the entire ArgoUML0.18.1 model is:
http://www.learndiary.com/pictures/loginDesign/resetPsd2.zargo .
The description is at:
http://www.learndiary.com/disDiaryContentAction.do?goalID=1300
希望大家给出您的宝贵意见和建议。谢谢。
第三次提交了argouml建模,把模型交给ppig,征询了一下意见,基本上就按原来的思路了。我想下一步可以把argouml生成的代码框架(加了一些必要的伪代码)提交到cvs库中了。
但是,我发现使用argouml的反向工程有问题,反向生成的类图产生的代码的import语句出错(已报告),而且,如果,反复反向和正向代码生成,里面的javadoc的行距会越变越大,如果继续这样,要考虑向argouml说一下。
虽然如此,我觉得使用argouml基本上能够完成现有的建模任务。但是,也看到了开源建模工具和商业工具的差距还是不小。尤其是易用性方面。我可以把上面的过程在其它商业软件中试一下,对比看情况如何。
也许,是因为我刚开始用它,不熟悉的缘故吧?
作为一个"argouml+eclipse+struts+testing based"的试点小程序,我把这个模块提交到了模块learndiary/find_a_way/login中。
现在,进入正式的编码阶段,ppig主要做测试代码框架的编写。我主要写功能代码。整个程序的目录结构如下:
Directory Structure:
root
|_build.xml(ant build script)
|_learndiary.LICENSE.txt(license file)
|_README.txt(this file)
|_build(temp folder for ant building)
|_database(database creating files)
|_design(ArgoUML model)
|_dist(distribution files)
|_docs(javadoc files)
|_lib(jar files are needed by ant building)
|_src(java source files)
|_tests(junit,strutstest testing class source files)
|_pages_demo_of_login_part(pages demo of login interface,the design has been changed in fact)
|_web(web application files)
见:http://learndiary.tigris.org/source/browse/learndiary/find_a_way/login/
这个流程很好