java 实现 一个账号只能在一个地方登陆,其他地方被下线
其实方法有很多的,我这献丑了。
使用理解java 四大作用域。
思路:理解java 四大作用域的关键。
第一个地方登陆:
1.得到请求的SessionId 和 登陆的 用户名
2.把SessionId 存到application里,用户名存到当前session里
ActionContext ac = ActionContext.getContext();
Map<String, Object> applicationMap=ac.getApplication();
Map<String, Object> sesisonMap = ac.getSession();
//请求的sessionId
String currentSeesionId= getRequest().getSession().getId();
applicationMap.put(loanUserE.getUname(), currentSeesionId);
sesisonMap.put(CommonVar.SSO_LOGIN_NAME_KEY,loanUserE.getUname());
第二个地方登陆:
1.获取浏览器的 SessionId 和取得 登陆的用户名
2.在当前的session 里取得 用户名对应的关键字 ,用关键字在application里获取SessionId ,
作比较,不相等就跳到登陆。
拦截器: /** 初始化参数获得 */
ActionContext actionContext = arg0.getInvocationContext();
/** HttpServletRequest参数 */
HttpServletRequest request = (HttpServletRequest) actionContext.get(StrutsStatics.HTTP_REQUEST);
/** HttpServletResponse参数 */
HttpServletResponse response = (HttpServletResponse) actionContext.get(StrutsStatics.HTTP_RESPONSE);
/** Session参数 */
Map<String, Object> sessionMap = actionContext.getSession();
Map<String, Object> appcationMap = actionContext.getApplication();
String loginName = null;
// 上下文对象中的sessionId
String sessionId = null;
if (!sessionMap.isEmpty()) {
loginName = (String) sessionMap.get(CommonVar.SSO_LOGIN_NAME_KEY);
}
if (null != loginName) {
sessionId = (String) appcationMap.get(loginName);
}
// 当前会话的sessionId
String currentSessionId = request.getSession().getId(); if (!currentSessionId.equals(sessionId)) {
return "loanUserLogin";
}
java 实现 一个账号只能在一个地方登陆,其他地方被下线的更多相关文章
- asp.net mvc 简单实现一个账号只能在一个地方登录
原理: 假设用户在机器A登陆后, 这时用户再次在机器B登陆,会以当前会话的SessionID作为键,用户id作为值,插入dictionary集合中,集合再保存在application(保存在服务器 ...
- SpringMVC实现账号只能在一处登陆
一.问题引导 在Web开发中,实现一个账号只能在一处登陆有两种形式:1.当某个账号在某处登陆后,如果再在其他处登陆,将前一个账号挤掉:2.当某个账号登陆后,此账号在其他设备登陆提示已经登陆,无法登陆. ...
- 用java实现一个简单的单用户登陆功能的思路
引用 所谓“单用户单账户登录”是指:在同一系统中,一个用户名不能在两个地方同时登录. 我们参照 QQ 实现效果:当某账号在 A 处登录后,在未退出的情况下,如果再到 B 处登录,那么,系统会挤下 A ...
- HDU 3594 Cactus (强连通分量 + 一个边只能在一个环里)
题意:判断题目中给出的图是否符合两个条件.1 这图只有一个强连通分量 2 一条边只能出现在一个环里. 思路:条件1的满足只需要tarjan算法正常求强连通分量即可,关键是第二个条件,我们把对边的判断转 ...
- php实现同一时间内一个账户只允许在一个终端登陆
在账户表的基础上,我新建了一个账户account_session表,用来记录登录账户的account_id和最新一次登录成功用户的session_id,然后首先要修改登录方法:每次登录成功后,要将登录 ...
- FineReport:任意时刻只允许在一个客户端登陆账号的插件
在使用FineReport报表系统中,处于账户安全考虑,有些企业希望同一账号在任意时刻智能在统一客户端登录.那么当A用户在C1客户端登陆后,该账号又在另外一个C2客户端登陆,服务器如何取判断呢? 开发 ...
- 一个区域只能放置一个组件,如果想在一个区域放置多个组件就需要使用Panel来装载
五种布局管理器: Flow Layout(流式布局):按照组件添加到容器中的顺序,顺序排放组件位置.默认为水平排列,如果越界那么会向下排列.排列的位置随着容器大小的改变而改变. Panel默认的布局管 ...
- java保持同一时间同一账号只能在一处登录
//登录页面 login.jsp <%@ page language="java" contentType="text/html; charset=UTF-8&qu ...
- Java文件中为什么只能有一个public修饰的类, 并且类名还必须与文件名相同
当编写一个java源代码文件时,此文件通常被称为编译单元(有时也被称为转译单元).每个编译单元都必须有一个后缀名.java,而在编译单元内则可以有一个public类,该类的名称必须与文件的名称相同(包 ...
随机推荐
- 写个脚本列出neutron的ovs的topology。
运行结果如下: $ ./nova-ifinfo a7026868-407c-4c54-bb8f-a68623d7e13fvm name is: instance-00000035 # 查找VM ...
- docker private registry使用
一.搭建harbor: 步骤:略 二.命令行操作: 登录:docker login docker01 tag image: tag 一个 image,名称一定要标准( registryAddress[ ...
- EF Dal通用类
一个通用的ef dal处理类是非擦汗那个提高工作效率的 using System; using System.Collections.Generic; using System.Data.Enti ...
- CRM需要注意的一些事,修改字段类型
crm字段类型如果变了,比如文本类型变为查找类型,要新建命名跟原来不一样,千万不能删除以前的字段再建原来的一样的,那样如果导到正式系统会造成无法导入,执行sql失败, 切记切记.可以字段名后加2,或者 ...
- SQL XML process
declare @data xml set @data=' <bookstore> <book category="COOKING"> <title ...
- 2014.9.16HTML表单CSS
(一)表格 合并单元格(少用) (合并列) 1.先选中要合并的2个或多个单元格,然后点击以下图标 代码:<td colspan="2"> </td> 2.设 ...
- 列求key出现的频率
1 cat mc.log | grep LOGIN_GET | awk '{print $9}' | sort | uniq -c
- HBase API详解
一.Java API和HBase数据模型的关系 在Java中,与HBase数据库存储管理相关的类包括HBaseAdmin.HBaseConfiguration.HTable.HTableDescrip ...
- MySql按指定天数进行分组数据统计分析 2
上次的随笔1中写的分组方式,经分析,是从前往后进行分组,即若选择2014的数据进行统计每11天为一组的话,1的分组方式, 按照2014-01-01——2014-01-11为一组,之后每11天为一组. ...
- Socket缓冲区探讨,是否有拆包的方式?
Socket缓冲区探讨 本文主要探讨java网络套接字传输模型,并对如何将NIO应用于服务端,提高服务端的运行能力和降低服务负载. 1.1 socket套接字缓冲区 Java提供了便捷的网络编程模式, ...