【sso单点登录系统】

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

返回值

{

status200 //200 成功

msg: "OK" // 返回信息消息

datafalse // 返回数据,true:数据可用,false:数据不可用

}

 

解决方案

功能分析

请求的url:/user/check/{param}/{type}

参数:从url中取参数1、String param(要校验的数据)2、Integer type(校验的数据类型)

响应的数据:json数据。TaotaoResult,封装的数据校验的结果true:成功false:失败。

业务逻辑:

  1. 从tb_user表中查询数据
  2. 查询条件根据参数动态生成。
  3. 判断查询结果,如果查询到数据返回false。
  4. 如果没有返回true。
  5. 使用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

 

 

返回值

{

status400

msg: "注册失败. 请校验数据后请再提交数据."

datanull

}

 

解决方案

请求的url:/user/register

参数:表单的数据:username、password、phone、email

返回值:json数据。TaotaoResult

接收参数:使用TbUser对象接收。

请求的方法:post

业务逻辑:

  1. 使用TbUser接收提交的请求。
  2. 补全TbUser其他属性。
  3. 密码要进行MD5加密。
  4. 把用户信息插入到数据 库中。
  5. 返回TaotaoResult。

3  用户登录

需求 

请求方法

POST

URL

http://sso.taotao.com/user/login

参数

username //用户名

password //密码

参数说明

 

 

示例

http://sso.taotao.com/user/login

 

username=zhangsan&password=123

返回值

{

status200

msg: "OK"

data: "fe5cb546aeb3ce1bf37abcb08a40493e" //登录成功,返回token

}

 

解决方案

请求的url:/user/login

请求的方法:POST

参数:username、password,表单提交的数据。可以使用方法的形参接收。

返回值:json数据,使用TaotaoResult包含一个token。

业务逻辑:

  1. 登录页面提交用户名密码。
  2. 登录成功后生成token。Token相当于原来的jsessionid,字符串,可以使用uuid。
  3. 把用户信息保存到redis。Key就是token,value就是TbUser对象转换成json。
  4. 使用String类型保存Session信息。可以使用“前缀:token”为key
  5. 设置key的过期时间。模拟Session的过期时间。一般半个小时。
  6. 把token写入cookie中。
  7. Cookie需要跨域。例如www.taotao.com\sso.taotao.com\order.taotao.com,可以使用工具类。
  8. Cookie的有效期。关闭浏览器失效。
  9. 登录成功。

4  通过token查询用户信息

需求

请求方法

GET

URL

http://sso.taotao.com/user/token/{token}

参数

token //用户登录凭证

callback//jsonp回调方法

参数说明

可选参数callback:如果有此参数表示此方法为jsonp请求,需要支持jsonp。

 

示例

 

http://sso.taotao.com/user/token/fe5cb546aeb3ce1bf37abcb08a40493e

 

返回值

{

status200

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对象。

业务逻辑:

  1. 从url中取参数。
  2. 根据token查询redis。
  3. 如果查询不到数据。返回用户已经过期。
  4. 如果查询到数据,说明用户已经登录。
  5. 需要重置key的过期时间。
  6. 把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

 

返回值

{

status200

msg: "OK"

data: ""

}

解决方案

请求的url:/user/logout/{token}

参数:String token需要从url中取。

返回值:json数据。使用TaotaoResult返回一个空串。

业务逻辑:

  1. 从url中取参数。
  2. 根据token查询redis。
  3. 如果查询不到数据。返回用户已经过期。
  4. 如果查询到数据,说明用户已经登录。
  5. 将key对应的数值置为null。

猜你喜欢

转载自blog.csdn.net/lxiansheng001/article/details/83068576