今天继续讲java qq项目的详细设计,今天讲一下qq的安全模块,包括客户端安全模块和服务器接收请求并处理后返回结果以及两者协作的过程,以流程图的方式讲述一下
客户端的安全模块流程及伪码如下:
- 对在飞Q安全界面中,分为“安全概述”,“常见欺诈”,“修改密码”,“修改密保”;
- <1> 安全概述
- 安全概述 概述了你当前飞Q的安全状况
- if (设置密保并且密码等级为良好以上)
- {
- 安全状况良好请继续保持良好的习惯
- 可立即完成设置密码
- }
- else if (设置密保并且密码等级为中等以下)
- {
- 安全状况存在隐患请定期修改密码
- 立即完成设置密码
- }
- else
- {
- 安全状况危险请立刻设置密保问题
- 立即完成设置密保
- }
- <2> 常见欺诈
- 常见的集中欺诈方式:钓鱼网址,视频欺诈,中奖欺诈,冒充好友欺诈;
- <3> 修改密码
- 修改密码之前请确保设置密保;
- 如果没有设置密保问题,请先设置密保问题,以确保该账户的安全性。如果设置了密保问题,请先输入原密保问题,核对用户身份。密保正确才可以修改,如果错误,对不起,不能修改密码。
- if(三个密保问题有空)
- {
- 对不起,密保问题回答不能为空!
- 没填写的须不完整
- }
- else
- {
- 向服务器获取对应密保问题的答案
- If(回答错误)
- {
- 提示:对不起,密保问题回答不能正确
- 全部清空,重新输入
- }
- else
- {
- 修改密码
- 输入旧密码
- if (输入的旧密码正确)
- {
- if (新密码为空)
- {
- 提示:密码不能为空
- }
- else if (两次密码输入不一致)
- {
- 提示:两次密码输入不一致
- }
- else if (两次密码输入一致并且不空)
- {
- 向服务器发送该账号的新密码
- }
- }
- else
- {
- 提示:密码有误,请重新输入
- }
- }
- }
- <4> 修改密保
- 如果没有设置密保问题,设置密保问题。
- 如果设置了密保问题,请先输入原密保问题,核对用户身份。密保正确才可以修改,如果错误,对不起,不能修改密保。
- if(没有设置密保)
- {
- 选择密保问题回答
- If(选择的密保问题重复)
- {
- 提示:选择的密保问题重复
- 重新选择密保问题
- }
- Else if(修改密保时验证密保问题为空)
- {
- 提示:修改密保时验证密保问题为空
- }
- Else
- {
- 服务器发送该账号的新密保问题和新密保问题对应的答案
- }
- }
- else
- {
- 已经设置设置密保
- 向服务器获取对应密保问题的答案
- 输入密保问题答案(用户)
- If(回答错误)
- {
- 提示:对不起,密保问题回答不能正确
- 全部清空,重新输入
- }
- else
- {
- 修改密保
- 选择密保问题回答
- If(选择的密保问题重复)
- {
- 提示:选择的密保问题重复
- 重新选择密保问题
- }
- Else if(修改密保时验证密保问题为空)
- {
- 提示:修改密保时验证密保问题为空
- }
- Else
- {
- 服务器发送该账号的新密保问题和新密保问题对应的答案
- }
- }
- }
流程图如下:
服务器的安全模块分为以下几个子模块:
- 设置密保模块
- 判断是否设置密保模块
- 判断密保答案是否正确模块
- 修改密保模块
- 修改密码模块
- 找回密码
服务器端的流程伪码如下:
- 1、设置密保模块
- 用户发送修改好友昵称信息包,服务器解析成基本数据,在数据库中找到该用户的的信息,将密保问题和答案写入该用户的数据库中,假如已有密保问题则转到重设密保模块
- 2、判断是否设置密保模块
- 用户发送请求后,服务器解析出数据,在数据库中找到该好友,查看该好友是否设置密保,
- If(设置了密保)
- {
- 返回密保问题
- }
- Else if(没有设置密保)
- {
- 发送回去没有设置密保的标识
- }
- 3、判断密保答案是否正确模块
- 用户发送给服务器密保答案信息,服务器解析出相应的数据,从数据库中查找该用户的信息,得到密保问题和答案,进行判断三个问题是否全部回答对
- If(三个密保问题全回答对)
- {
- 向该用户客户端发送验证成功的消息
- }
- Else(三个问题不全对或全不对)
- {
- 向该用户客户端发送验证失败信息
- }
- 4、修改密保模块
- 这里说明一下,修改密保的模块是在验证密保答案正确的前提下才能进入的,所以此模块仅仅是覆盖掉该用户的,特此声明,呵呵,声明有点晚了。。
- 没有复杂逻辑判断,思路如下:
- 用户发送给服务器新密保信息,服务器解析出相应的数据,从数据库中查找该用户,在数据库中重写此人的密保问题和答案,然后子线程接收。
- 5、修改密码模块
- 声明如7.4所示,不再重复
- 思路如下:
- 用户发送给服务器新密码信息,服务器解析出相应的数据,从数据库中查找该用户,在数据库中重写此人的密码,同时将新设置的密码加入内存中用户密码hashmap中,然后子线程接收。
- 6、找回密码
- 找回密码其实和重设密保有什么相识的地方,都是先验证信息密保信息是否正确,然后根据正确与否做出相应的处理
- 用户发送请求后,服务器解析出数据,在数据库中找到该好友,查看该好友是否设置密保,
- If(设置了密保)
- {
- 返回密保问题
- 。。。
- 判断接受的密保答案是否正确
- If(三个问题都回答正确)
- {
- 返回验证成功信息,通知客户端转入重设密码模块
- }
- Else
- {
- 返回验证失败信息
- }
- }
- Else if(没有设置密保)
- {
- 发送回去没有设置密保的标识,通知该用户由于没有设置密码,通过此方法不能找回密码。
- }
服务器的安全模块各子模块流程图如下:
1、设置密保模块
2、判断是否设置密保模块
3、判断密保答案是否正确模块
4、修改密保模块
5、修改密码模块
6、找回密码
本系列博文仅提供设计思路,及少量伪码,详细代码:
http://down.51cto.com/data/353289
原文链接:http://blog.csdn.net/wangchangshuai0010/article/details/7372373
【编辑推荐】