xmall商城学习笔记 登录

xmall商城学习笔记


前言

提示:今天要看的xmall-sso,单点登录模块

一、单点登录是什么?

简单讲就是在一个系统(模块中登录)其他模块或系统都可以访问,无需在登录
这边有一篇文章讲的很透彻:单点登录的原理

我们这边主要来研究xmall是如何实现的,并且对它优化

二、项目结构

在这里插入图片描述
很明显这是一个服务,他是注册到zookeeper中的
我们主要看service ,它下面又三个文件比较重要
LoginServiceImpl、MemberServiceImpl、RegisterServiceImpl
RegisterServiceImpl 里是注册账号的,就是对数据库的查找和插入,这个不难。

我们来看LoginServiceImpl这个类,它只有三个方法userLogin、getUserByToken、logout
先看第一个方法

List<TbMember> list = tbMemberMapper.selectByExample(example);
		if (list == null || list.size() == 0) {
			Member member=new Member();
			member.setState(0);
			member.setMessage("用户名或密码错误");
			return member;
		}
		TbMember tbMember = list.get(0);
		//md5加密
		if (!DigestUtils.md5DigestAsHex(password.getBytes()).equals(tbMember.getPassword())) {
			Member member=new Member();
			member.setState(0);
			member.setMessage("用户名或密码错误");
			return member;
		}
		String token = UUID.randomUUID().toString();
		Member member= DtoUtil.TbMemer2Member(tbMember);
		member.setToken(token);
		member.setState(1);
		// 用户信息写入redis:key:"SESSION:token" value:"user"
		jedisClient.set("SESSION:" + token, new Gson().toJson(member));
		jedisClient.expire("SESSION:" + token, SESSION_EXPIRE);

这段代码是核心了,主要就是去数据库查找用户,如果没有就抛异常,如果有就把生成token 存放到redis中并且设置过期时间。
代码如下(示例):

getUserByToken 这个方法就是用来验证登录状态的根据Token
然后“充值”过期时间

String json = jedisClient.get("SESSION:" + token);
		if (json==null) {
			Member member=new Member();
			member.setState(0);
			member.setMessage("用户登录已过期");
			return member;
		}
		//重置过期时间
		jedisClient.expire("SESSION:" + token, SESSION_EXPIRE);
		Member member = new Gson().fromJson(json,Member.class);
		return member;

logout 就两行代码
清空redis登录信息

jedisClient.del("SESSION:" + token);
		return 1;

MemberServiceImpl 这个类就一个方法imageUpload,用来更新头像的

总结

文章到这儿还远远没有结束,这么项目我们知道它用来shiro鉴权框架,那它和登录又什么关系呢?还有网上很火的JWT是什么呢?xmall的思路是不是和他们一致呢?后面我会修改这个项目的登录实现。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值