单点登陆实现思想:
-
用户登录时,随机生成一个uuid,当成 Value 存到客户端cookie里,再将uuid作为Key,把去掉敏感信息(密码,电话,邮箱等)的用户对象转换成的 json串当作value,存进redis里,为以后校验用
-
当用户在子页面之间进行切换时,先拿到页面的cookie,再从redis里查询cookie是否存在,不存在就重定向到登陆界面,存在则正常执行程序,实现单点登录
1-注册
1. 校验用户名、手机号、邮箱等
$.ajax({
url : "http://sso.jt.com/user/check/"+escape(pin)+"/1?r=" + Math.random(),
dataType : "jsonp",
success : function(data) {
checkpin = data.data?"1":"0";
if (data.status == 200){
if (!data.data) {
validateSettings.succeed.run(option);
namestate = true;
}else {
validateSettings.error.run(option, "该用户名已占用!");
namestate = false;
}
}else {
validateSettings.error.run(option, "服务器正忙,请稍候!");
namestate = false;
}
}
});
/**
* 需求:实现用户信息校验
* 校验步骤: 需要接收用户的请求,之后利用RestFul获取数据,
* 实现数据库校验,按照JSONP的方式返回数据.
* url地址: http://sso.jt.com/user/check/admin123/1?r=0.8&callback=jsonp16
* 参数: restFul方式获取
* 返回值: JSONPObject
*/ //============注册校验用户名、手机号============//
@RequestMapping("/check/{param}/{type}")//http://sso.jt.com/user/check/admin123/1?r=0.014981746295906095&callback=jsonp1607342205428&_=1607342388059
public JSONPObject checkUser(@PathVariable String param,//admin123
@PathVariable Integer type,//1
String callback){
//只需要校验数据库中是否有结果
boolean flag = userService.checkUser(param,type); // flag = true/false
SysResult sysResult = SysResult.success(flag);
//跨域请求返回 JSONPObject 对象
return new JSONPObject(callback, sysResult);
}
//**************jt-sso*********************
boolean checkUser(String param, Integer type);
//**************jt-sso*********************
/**
* 校验数据库中是否有数据....
* Sql: select count(*) from tb_user where username="admin123";
* 要求:返回数据true用户已存在,false用户不存在
*/
@Override
public boolean checkUser(String param, Integer type) {
String column = paramMap.get(type);
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq(column,param);
int count = userMapper.selectCount(queryWrapper);
return count