您的位置:首页 > 数据库 > Redis

springboot项目使用redis实现唯一登录

2019-08-30 17:58 1021 查看

唯一登录使用技术 redis的token令牌实现

实现效果

 

 

1.数据表结构 (用户登录表不写了)

-- Table structure for edu_user_only
-- ----------------------------
DROP TABLE IF EXISTS `edu_user_only`;
CREATE TABLE `edu_user_only` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`token` varchar(255) DEFAULT NULL COMMENT 'redis token ',
`login_type` varchar(20) DEFAULT NULL COMMENT 'pc h5',
`clevice_info` varchar(255) DEFAULT NULL COMMENT '设备信息',
`is_availability` int(10) DEFAULT '0' COMMENT '是否可用0 可用 1不可用',
`user_id` int(11) DEFAULT NULL COMMENT '创建用户id',
`create_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of edu_user_only
-- ----------------------------
BEGIN;
INSERT INTO `edu_user_only` VALUES (30, 'mt.pc.login8c9b8846-0975-4026-ae06-13f9784c7bdccc75d5bada8f4d26abf657b7fab252b9', 'pc', 'pc', 1, 4805, '2019-08-30 16:33:50', '2019-08-30 16:33:50');
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;

 

2.简单的代码实现 userid+登录类别 查询token

(不用地方或者浏览器生成token都不一样)

public  void  userLogin(String userId,String newToken){

Map map=new HashMap();
map.put("userId",userId);
map.put("loginType","pc");

UserOnly userOnly=new UserOnly();
userOnly.setUserId(Integer.parseInt(userId));
userOnly.setCleviceInfo("pc");
userOnly.setLoginType("pc");
userOnly.setIsAvailability(1);
userOnly.setToken(newToken);
userOnly.setCreateTime(new Date());
userOnly.setUpdateTime(new Date());

UserOnly userOnlyByUserIdAndType = userOnlyService.selectLoginOnlyByUserIdAndType(map);
if (userOnlyByUserIdAndType==null){
//唯一登录表中插入数据
userOnlyService.insertLoginOnly(userOnly);
}else {
//删除token 重新生成
userOnlyService.deleteLoginOnlyById(userOnlyByUserIdAndType.getId());
redisUtil.delKey(userOnlyByUserIdAndType.getToken());
userOnlyService.insertLoginOnly(userOnly);
}

}

3.前端定时

userLoginOnlyVip 判断用户是否是vip用户(普通用户太多,为了减少服务器压力)

而且不会放在首页,放在需要的页面。也是为了减少服务器压力

 

<script>

setInterval(function(){
var userLoginOnlyVip = $("#userLoginOnlyVip").val();
if (userLoginOnlyVip==1){

$.ajax({
//几个参数需要注意一下
type: "POST",//方法类型
contentType: "application/json;charset=UTF-8",
dataType: "json",//预期服务器返回的数据类型
url: "/sso/user/loginOnly",//url
data: JSON.stringify({

}),
success: function (result) {
var json = eval(result);
console.log(json); //打印服务端返回的数据(调试用)
if (json.code == 200) {
}
;
if (json.code == 500) {
// 账户在另一处登录 显示
$(".log-in-again").show();
$(".motaiceng").show();

}
;
},

});

}

},5000)

</script>

 

 

总结 

1. 判断是否是pc和h5 ,使用类别+userid 查询token(因为不同的地方(不同浏览器)生成的token不一样)

然后清除token,生成新的token(key为token value=userid)前端定时检查会查询token,不一致会顶下去

2.为了减少服务器压力,一般会判断,用户是否是会员(在加新跳检查),或者在特定的页面(比如首页,没什么东西就不需要了)

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Redis Spring Spring Boot
相关文章推荐