实现单用户登录的原理和实践 java

2024-02-10 11:48

本文主要是介绍实现单用户登录的原理和实践 java,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近,公司需要对项目实现单用户登录,以下是实现的原理和具体的操作步骤。

原理:每个用户登录成功(主要是登录成功的时间)的日志保存到数据库,同时把登录成功的记录(主要是登录成功的时间)保存到session里,然后在写拦截器拦截每个请求,在处理请求的同时,判断当前用户的session里的登录时间 和数据库当前最新的登录时间是否一致,如果不一致,则说明该用户在其他地方也登录了。


项目简介:该套项目是javaSE,主要用了shiro的安全框架,拦截器通过shiro进行配置,项目的session并没有用到shiro 的sessionManager管理器,而是用shiro默认的session管理器HttpSession。(详细资料参见:http://blog.csdn.net/xh199110/article/details/47029533)。所以以下具体实现步骤建立在shiro的相关知识上,如果您的项目没有配置shiro,参照上面的实现原理,相信您一定也能配置出来。

具体步骤如下:

一、找到系统登录的代码,添加把登录的成功的对象保存到session里,系统已经把登录的成功的信息保存数据库,所以我们只做保存session的操作。

A在前台页面系统登录:


系统后台登录代码:


二、找到系统配置每步都会请求拦截的拦截器,如果没有可以自己配置,我们的拦截器是通过shiro配置的:

配置shiro的拦截器



在拦截器方法里,进行用户重复登录逻辑的判断方法,如果用户已经登录了,则调用用户是否重复登录的方法。此时如果只有A登录,dateString和sessionDateString相等;

接着B也登录后,B点击页面被拦截时,dateString和sessionDateString也是相等;接着A再点击页面被拦截器拦截时,dateString和sessionDateString是不相等的,接着会判断此时是不是拦截的请求是不是退出系统的请求,如果不是,则调用请求转发到登录页面里去。

\

三、如果B用户在另一客户端登录的话,A用户点击操作,被拦截器拦截,系统请求转发跳转到登录页面,因为前台页面是在iframe里,拦截器的请求可能是左侧的iframe或者是右侧iframe,当拦截器到登录页面里时,要跳出top.location.href,重新跳转到登录页面。

返回到登录页面,跳出iframe页面,重新请求登录页面,携带参数removesession有值。



再次跳转到登录页面时,参数removesession有值,系统前台页面提示“您的账号在另一客户端登录!”,此时并且请求controller把用户退出注销。



前台页面显示提示信息:


以上是所有的操作步骤,唯一觉得不太妥当的地方是在登录页面里用ajax请求controller注销用户,如果更好的处理方法,欢迎给我留言交流!

这篇关于实现单用户登录的原理和实践 java的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/697025

相关文章

Java实现优雅日期处理的方案详解

《Java实现优雅日期处理的方案详解》在我们的日常工作中,需要经常处理各种格式,各种类似的的日期或者时间,下面我们就来看看如何使用java处理这样的日期问题吧,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言一、日期的坑1.1 日期格式化陷阱1.2 时区转换二、优雅方案的进阶之路2.1 线程安全重构2

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

Java中的JSONObject详解

《Java中的JSONObject详解》:本文主要介绍Java中的JSONObject详解,需要的朋友可以参考下... Java中的jsONObject详解一、引言在Java开发中,处理JSON数据是一种常见的需求。JSONObject是处理JSON对象的一个非常有用的类,它提供了一系列的API来操作J

使用Python实现图像LBP特征提取的操作方法

《使用Python实现图像LBP特征提取的操作方法》LBP特征叫做局部二值模式,常用于纹理特征提取,并在纹理分类中具有较强的区分能力,本文给大家介绍了如何使用Python实现图像LBP特征提取的操作方... 目录一、LBP特征介绍二、LBP特征描述三、一些改进版本的LBP1.圆形LBP算子2.旋转不变的LB

Redis消息队列实现异步秒杀功能

《Redis消息队列实现异步秒杀功能》在高并发场景下,为了提高秒杀业务的性能,可将部分工作交给Redis处理,并通过异步方式执行,Redis提供了多种数据结构来实现消息队列,总结三种,本文详细介绍Re... 目录1 Redis消息队列1.1 List 结构1.2 Pub/Sub 模式1.3 Stream 结

SpringBoot多数据源配置完整指南

《SpringBoot多数据源配置完整指南》在复杂的企业应用中,经常需要连接多个数据库,SpringBoot提供了灵活的多数据源配置方式,以下是详细的实现方案,需要的朋友可以参考下... 目录一、基础多数据源配置1. 添加依赖2. 配置多个数据源3. 配置数据源Bean二、JPA多数据源配置1. 配置主数据

C# Where 泛型约束的实现

《C#Where泛型约束的实现》本文主要介绍了C#Where泛型约束的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录使用的对象约束分类where T : structwhere T : classwhere T : ne

将Java程序打包成EXE文件的实现方式

《将Java程序打包成EXE文件的实现方式》:本文主要介绍将Java程序打包成EXE文件的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录如何将Java程序编程打包成EXE文件1.准备Java程序2.生成JAR包3.选择并安装打包工具4.配置Launch4

SpringBoot内嵌Tomcat临时目录问题及解决

《SpringBoot内嵌Tomcat临时目录问题及解决》:本文主要介绍SpringBoot内嵌Tomcat临时目录问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录SprinjavascriptgBoot内嵌Tomcat临时目录问题1.背景2.方案3.代码中配置t

SpringBoot使用GZIP压缩反回数据问题

《SpringBoot使用GZIP压缩反回数据问题》:本文主要介绍SpringBoot使用GZIP压缩反回数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot使用GZIP压缩反回数据1、初识gzip2、gzip是什么,可以干什么?3、Spr