1、系统架构
面向接口开发
2、注册接口
2.1.1 检查shu数据是否可用
需求:
请求方法 |
GET |
URL |
http://sso.taotao.com/user/check/{param}/{type} |
参数说明 |
格式如:zhangsan/ 1,其中zhangsan是校验的数据,type为类型,可选参数1、2、3分别代表username、phone、email
可选参数callback:如果有此参数表示此方法为jsonp请求,需要支持jsonp。
|
示例 |
http://sso.taotao.com/user/check/zhangsan/1 |
返回值 |
{ status: 200 //200 成功 msg: "OK" // 返回信息消息 data: false // 返回数据,true:数据可用,false:数据不可用 }
|
解决方案
功能分析
请求的url:/user/check/{param}/{type}
参数:从url中取参数1、String param(要校验的数据)2、Integer type(校验的数据类型)
响应的数据:json数据。TaotaoResult,封装的数据校验的结果true:成功false:失败。
业务逻辑:
- 从tb_user表中查询数据
- 查询条件根据参数动态生成。
- 判断查询结果,如果查询到数据返回false。
- 如果没有返回true。
- 使用TaotaoResult包装,并返回。
Dao可以使用单表的逆向工程创建。
Service层
public TaotaoResult checkData(String param, int type) {
// 1、从tb_user表中查询数据
TbUserExample example = new TbUserExample();
Criteria criteria = example.createCriteria();
// 2、查询条件根据参数动态生成。
//1、2、3分别代表username、phone、email
if (type == 1) {
criteria.andUsernameEqualTo(param);
} else if (type == 2) {
criteria.andPhoneEqualTo(param);
} else if (type == 3) {
criteria.andEmailEqualTo(param);
} else {
return TaotaoResult.build(400, "非法的参数");
}
//执行查询
List<TbUser> list = userMapper.selectByExample(example);
// 3、判断查询结果,如果查询到数据返回false。
if (list == null || list.size() == 0) {
// 4、如果没有返回true。
return TaotaoResult.ok(true);
}
// 5、使用TaotaoResult包装,并返回。
return TaotaoResult.ok(false);
}
}
Controller层
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/user/check/{param}/{type}")
@ResponseBody
public TaotaoResult checkData(@PathVariable String param, @PathVariable Integer type) {
TaotaoResult taotaoResult = userService.checkData(param, type);
return taotaoResult;
}
}
2.1.2 用户注册
需求
请求方法 |
POST |
URL |
http://sso.taotao.com/user/register |
参数 |
username //用户名 password //密码 phone //手机号 email //邮箱 |
参数说明 |
|
示例 |
http://sso.taotao.com/user/register
|
返回值 |
{ status: 400 msg: "注册失败. 请校验数据后请再提交数据." data: null }
|
解决方案
请求的url:/user/register
参数:表单的数据:username、password、phone、email
返回值:json数据。TaotaoResult
接收参数:使用TbUser对象接收。
请求的方法:post
业务逻辑:
- 使用TbUser接收提交的请求。
- 补全TbUser其他属性。
- 密码要进行MD5加密。
- 把用户信息插入到数据 库中。
- 返回TaotaoResult。
3 用户登录
需求
请求方法 |
POST |
URL |
|
参数 |
username //用户名 password //密码 |
参数说明 |
|
示例 |
http://sso.taotao.com/user/login
username=zhangsan&password=123 |
返回值 |
{ status: 200 msg: "OK" data: "fe5cb546aeb3ce1bf37abcb08a40493e" //登录成功,返回token }
|
解决方案
请求的url:/user/login
请求的方法:POST
参数:username、password,表单提交的数据。可以使用方法的形参接收。
返回值:json数据,使用TaotaoResult包含一个token。
业务逻辑:
- 登录页面提交用户名密码。
- 登录成功后生成token。Token相当于原来的jsessionid,字符串,可以使用uuid。
- 把用户信息保存到redis。Key就是token,value就是TbUser对象转换成json。
- 使用String类型保存Session信息。可以使用“前缀:token”为key
- 设置key的过期时间。模拟Session的过期时间。一般半个小时。
- 把token写入cookie中。
- Cookie需要跨域。例如www.taotao.com\sso.taotao.com\order.taotao.com,可以使用工具类。
- Cookie的有效期。关闭浏览器失效。
- 登录成功。
4 通过token查询用户信息
需求
请求方法 |
GET |
URL |
http://sso.taotao.com/user/token/{token} |
参数 |
token //用户登录凭证 callback//jsonp回调方法 |
参数说明 |
可选参数callback:如果有此参数表示此方法为jsonp请求,需要支持jsonp。
|
示例 |
http://sso.taotao.com/user/token/fe5cb546aeb3ce1bf37abcb08a40493e
|
返回值 |
{ status: 200 msg: "OK" data: "{"id":1,"username":"zhangzhijun","phone":"15800807944", "email":"[email protected]","created":1414119176000,"updated":1414119179000}" }
|
解决方案
请求的url:/user/token/{token}
参数:String token需要从url中取。
返回值:json数据。使用TaotaoResult包装Tbuser对象。
业务逻辑:
- 从url中取参数。
- 根据token查询redis。
- 如果查询不到数据。返回用户已经过期。
- 如果查询到数据,说明用户已经登录。
- 需要重置key的过期时间。
- 把json数据转换成TbUser对象,然后使用TaotaoResult包装并返回。
5、安全退出
请求方法 |
GET |
URL |
http://sso.taotao.com/user/logout/{token} |
参数 |
token //用户登录凭证 callback//jsonp回调方法 |
参数说明 |
可选参数callback:如果有此参数表示此方法为jsonp请求,需要支持jsonp。
|
示例 |
http://sso.taotao.com/user/logout/fe5cb546aeb3ce1bf37abcb08a40493e
|
返回值 |
{ status: 200 msg: "OK" data: "" } |
解决方案
请求的url:/user/logout/{token}
参数:String token需要从url中取。
返回值:json数据。使用TaotaoResult返回一个空串。
业务逻辑:
- 从url中取参数。
- 根据token查询redis。
- 如果查询不到数据。返回用户已经过期。
- 如果查询到数据,说明用户已经登录。
- 将key对应的数值置为null。