单点登入 使用redis模拟session实现单点登入

本文介绍了如何使用Redis作为公共服务器进行用户登录和认证。在用户登录时,系统通过uuid或雪花算法生成id并存入Redis,同时设置cookie。各子系统通过拦截器判断cookie中的用户id,从Redis获取用户信息,实现跨系统的用户状态共享。

redis就是一个公共的服务器,所有的子系统都能连接redis进行访问

1. 登入

在登入模块实现用户名密码的校验之后,通过uuid或者雪花算法生成id,存入redis,并返回一个cookie {currUser:#{id}}

public void login(String username,password){
	User user = userService.findUser(username,password);
	if(user != null){
		//登陆成功,将用户信息存入redis

		redisTemplate.boundHashOps("loginUser").put(当前用户ID,user);
		Cookie cookie = new Cookie("currUser",当前用户ID);
		cookie.setPath("/");
		cookie.setDomain("baidu.com");  //www.baidu.com  item.baidu.com cart.baidu.com
		// response响应浏览器
	}
}

2. 认证

每一个子系统都能引入一个拦截器(可以自己写一个springMVC拦截器),判断当前是否登陆

{
	Cookie[] cookies = request.getCookies();
	//循环查找currUser名字的cookie
	cookie cookie = findCookie("currUser");
	if(cookie != null){
		User user = redisTemplate.boundHashOps("loginUser").get(cookie.getValue());
		if(user != null){
			//已经登陆
			//....
		}else{
			//用户失效
			//.....
		}
	}else{
		//没有登入
		//......
	}
}

转载于:https://my.oschina.net/edisonOnCall/blog/3044432

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值