SpringMVC中的单点登录实现

本文介绍了SpringMVC中实现单点登录的原理和方法。主要关注第二种方案,即通过拦截器技术和用户表中SessionId的比对,防止同一用户在不同设备上同时登录。当发现SessionId不匹配时,提示用户账号异地登录并强制下线。同时,文章还讨论了如何处理Ajax请求的单点登录问题,确保所有请求都能得到有效的响应。
摘要由CSDN通过智能技术生成

单点登录的功能在实际的应用场景中还是很重要的,逻辑上我们也不允许一个用户同时在进行着两个操作,下面就来了解一下SpringMVC的单点登录实现

1,先探究一个基本的实现原理:这个功能还是比较简单的,就是对于同一个web项目同一个时间只能有一个用户在进行操作,所以这里就涉及到一个异地登录的发现,而这里就推出两条路,1是服务器发现已登录的用户通过另一个IP再次执行了登录操作,然后主动推送一个提醒告诉第一个用户账号异地登录;2是当用户进行操作的时候发现自己的账号被挤掉了,有异地登录。关于这两个方案,第一种是比较具有实时性的但是还在探究中,下面重点说一说第二种方式。

2,实现第二种也比较简单,两个操作,一是在用户表中多加一个字段,用来存储登录用户的SessionId,因为每一个request请求都会对应一个唯一不重复的Sessionid,然后呢就是用拦截器技术了,对用户的操作进行拦截,在拦截器中首先是对登录页面的相关url请求进行放行,然后还有的就是登录校验的请求放行。最后再对用户进行过滤,(关于用户登录,在验证成功时,不仅要把用户存入Session中用于登录拦截的验证,还需要把Session的ID存入用户表中对应的Sessionid)对于此次请求的request可以获取到Session及其ID然后再根据这个ID与数据库中的Sessionid进行比较是否相同相同则通过放行,不同则提示下线跳转登录,因为在一次用户连接服务器操作中会存在一个Session只要Session不过期每次用户发起的操作的request的Session的id都是一致的所以会和登录时存入数据库中的id匹配,当有其他人通过其他设备再用同一个账号进行登录时会重新建立Session会刷新数据库中的Sessionid而自己的Sessionid还是不变的,但是数据库中的Session已经发生了改变,所以在拦截器中校验数据库中Sessionid是否一致时就会失败从而拦截用户操作达到单用户登录的功能,(关于Session的说明,当用户初次与服务器连接时会在服务器端创建一个Session,而之后用户发起的每一次操作request中都会携带这个Session的id而 出现一些情况Session的失效,用户长时间没有与服务器之间进行操作,用户退出登录主动让Session失效,用户关闭浏览器,或者服务器重新启动)


下面是SpringMVC中拦截器的实现



public class SingleUserInterceptor implements HandlerInterceptor {


  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值