人员登录模块设计

我最近接到了为老系统重构登录功能的任务,前几日按照要求把流程设计出来。现在在这里将大致内容分享给大家,也希望大家能够提供宝贵的意见,指出我设计中的不足,非常感谢各位。目前只是考虑了集群,不适用于分布式系统。

流程设计图如下:

(感谢亿图图示提供的试用版软件,非常nice)在这里插入图片描述
**

整个流程分为三部分:

主体登录部分、redis缓存加载/更新部分、定时任务部分。下面依次介绍。

主体登录部分:

**
1.通过redis查看当前人员是否被临时锁定
2.通过redis查看是否是锁定ip
3.判断是否是系统锁定用户或者未激活用户
先访问缓存,看有无可利用数据。如果没有可利用项,根据账号,获取当前人员的相关数据。这些信息序列化之后放入缓存中,防止暴力破解当前用户,造成击穿数据库的问题。
4.检查用户密码是否过期
5.session重置,密码base64解密
session重置可以不做
6.密码验证:
密码的加密采用加盐+md5+sha-1的加密机制,保证密码的安全性
7.短期内多次错误登录判断
验证方法:首次错误登录之后,redis中会写入一个<USER_LOGIN_error_用户名,5>的键值对,过期时间为5分钟。后续如果再次登录失败,value减1,如果登录成功,去掉该键值对。如果value小于0,新增临时锁定账号的缓存,同时去掉前面的键值对。锁定ip同理。
7.查看当前用户是否可以同时登录多个
如果不可以同一账号同时登录多个,需要将该账号已经登录的会话断开。
8.信息写入(这个是我们系统内部的设计,仅供参考)
写入threadlocal<连接信息>
这个对象保存的是当前接入人员的相关信息,方便后面程序获取相关数据
写入map<sessionId,在线人员信息>
这个对象保存的是所有在线的人员信息,方便做人员的实时监控,同时可以对在线人员执行登出操作。

上面划删除线的部分有待考虑,集群状态下无法获取完整的用户登录状态信息。希望大家给出一点建议。

redis缓存加载/更新部分:

1.针对冷启动的redis,我们采用子系统或者子功能模块的形式更新/加载redis信息。如果将加载redis缓存的代码写在工程启动里,集群部署时会反复重写redis,造成很大浪费。
2.加载的信息主要包括临时锁定账号、锁定ip信息。
3.清除在线人员信息的缓存

定时任务部分:

1.检查密码是否到期,如果即将到期需要发送提醒
2.当前在线人员信息目前是保存在缓存中。session过期之后,该数据仍旧存在于缓存中,需要我们定时去清除这些数据。
3.检查当日登录错误日志,某一ip密码输入错误导致登录失败的次数超过一定限制会被加入黑名单,更新ip锁定表同时更新redis中的ip锁定缓存
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值