用java实现一个简单的单用户登陆功能的思路
所谓“单用户单账户登录”是指:在同一系统中,一个用户名不能在两个地方同时登录。
我们参照 QQ 实现效果:当某账号在 A 处登录后,在未退出的情况下,如果再到 B 处登录,那么,系统会挤下 A 处登录的账号。
要实现这样一个功能,如果我们项目使用了springmvc我们可以使用拦截器来替代过滤器,否则我们使用过滤器也可以实现,我们需要一个这样的东西来进行拦截用户的请求。我们的user表里也需要添加一个token字段,用于存放当前登录者的一个唯一标识。
大致的思路是这样的:
用户A请求123这个账号登陆,登陆成功后生成一个唯一token存入123这个对象的token里,并把这个user对象放入session中,最重要的是别忘记更新这个用户的表记录。如果这时用户B也请求登陆123账号,同样的我们也在登陆成功后生成要给唯一token存入123这个对象的token里,并把这个user对象放入session中,最重要的是别忘记更新这个用户的表记录。现在的情况是有两个用户在两个地点登陆了同一个账号123,那么此时如果用户A向服务器发送了一个请求他想要去查看个人资料,我们的拦截器就要开始工作了,可以说整个单用户登陆的重点都在这个拦截器里面,在拦截器里面我们去获取session中保存的user对象,此时我们要明白当前这个user对象里的token标记着的是用户A,而数据库里真实token的数据已经在用户B登陆后被修改了,标记着的是用户B,我们根据这个条件用session中的user对象和数据库中的user去进行比较判断token是否相同就可以实现单用户登陆这个功能了,如果相同说明是同一个用户,否则就说明有其他人在其他地方登陆了,需要清除掉当前session中的user去退出当前这个账号即可。
用java实现一个简单的单用户登陆功能的思路的更多相关文章
- java实现一个简单的单链表反转
自定义一个单链表,实现链表反转: 1.普通方法实现 2.递归方式实现 package listNode; public class ReverseNode { public static void m ...
- 使用Java编写一个简单的Web的监控系统cpu利用率,cpu温度,总内存大小
原文:http://www.jb51.net/article/75002.htm 这篇文章主要介绍了使用Java编写一个简单的Web的监控系统的例子,并且将重要信息转为XML通过网页前端显示,非常之实 ...
- jmeter压力测试的简单实例+badboy脚本录制(一个简单的网页用户登录测试的结果)
JMeter的安装:在网上下载,在下载后的zip解压后,在bin目录下找到JMeter.bat文件,双击就可以运行JMeter. http://jmeter.apache.org/ 在使用jmeter ...
- simple-spa 一个简单的单页应用实例
上两篇文章说过要写一个简单的单页应用例子的, 迟迟没有兑诺, 实在有愧 哈哈.这篇写给小白用户哈. 正好趁今天风和日丽,事情不多, 把从项目里的代码扣取了一下, 整理了一个简单的例子.因为我们生产项目 ...
- 使用JAVA写一个简单的日历
JAVA写一个简单的日历import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateF ...
- 使用 java 实现一个简单的 markdown 语法解析器
1. 什么是 markdown Markdown 是一种轻量级的「标记语言」,它的优点很多,目前也被越来越多的写作爱好者,撰稿者广泛使用.看到这里请不要被「标记」.「语言」所迷惑,Markdown 的 ...
- java:jsp: 一个简单的自定义标签 tld
java:jsp: 一个简单的自定义标签 tld 请注意,uri都是:http://www.tag.com/mytag,保持统一,要不然报错,不能访问 tld文件 <?xml version=& ...
- Java实现一个简单的网络爬虫
Java实现一个简单的网络爬虫 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileWri ...
- Java实现一个简单的文件上传案例
Java实现一个简单的文件上传案例 实现流程: 1.客户端从硬盘读取文件数据到程序中 2.客户端输出流,写出文件到服务端 3.服务端输出流,读取文件数据到服务端中 4.输出流,写出文件数据到服务器硬盘 ...
随机推荐
- Flask之flask-migrate 数据库迁移
简介 flask-migrate是flask的一个扩展模块,主要是扩展数据库表结构的. 官方文档:http://flask-migrate.readthedocs.io/en/latest/ 使用fl ...
- CodeChef - RIN 最小割应用 规划问题
题意:给定\(n\)门课和\(m\)个学期,每门课在每个学期有不同的得分,需要选定一个学期去完成,但存在约束条件,共有\(k\)对课程需要\(a\)在\(b\)开始学前学会,求最大得分(原问题是求最高 ...
- archlinux安装交叉编译工具链
1. 在/usr/local下新建文件夹:arm [guo@archlinux local]$sudo mkdir arm 2. 将交叉编译工具拷贝到arm文件夹中 [guo@archlinux ...
- Photoshop入门教程(七):蒙版
学习心得:蒙版在Photoshop中也是很常用的,学会使用蒙版,可以提高图像处理能力,并且可以保护原片不被破坏,建议多使用一些蒙版. 蒙板是灰度的,是将不同灰度色值转化为不同的透明度,并作用到它所在的 ...
- TT 安装之 Windwos
WINDOWS在 控制面板-〉管理工具-〉本地安全策略-〉本地策略-〉用户权限分配-〉锁定内存页-〉添加用户或组-〉高级查找 然后确定 然后安装 (WINDOWS在 控制面板-〉管理工具-〉ODBC工 ...
- ali代码风格
如下: <?xml version="1.0" encoding="UTF-8" standalone="no"?><pr ...
- encoding specified in XML prolog (UTF-8) is different from that specified in page directive (utf-8)
myeclipse下启动项目后出现错误:encoding specified in XML prolog (UTF-8) is different from that specified in pag ...
- day07 - Python - 面向对象进阶
本节内容: 面向对象高级语法部分异常处理异常处理异常处理 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 作业:开发一个支持多用户在线的FTP程序 面向对象高级语法部分 1 ...
- PHP冒泡排序的实现方法
<?php function BubbleSort($arr){ $count = count($arr); if($count<=1){ return $arr; } for($i=0; ...
- 让C:\Users文件夹放在D盘
新安装win7 在安装Win7的过程中,要求输入用户名及密码的时候,先不如输入任何信息,按“Shift+F10”呼出DOS窗口,输入以下命令: robocopy "C:\Users" ...