java做单用户的多重并发会话数限制

判定条件很简单,就是在同一时刻,同一帐号仅在一个终端上可正常操作。

我这里用简单的key,value进行判定,将用户存储在map里面,新登录用户登陆进系统后,判断map里是否存在当前用户,若存在就删除,将新登录用户的session信息存入map里,这样前面登录用户就会退出系统。

继承HttpSessionListener,HttpSessionAttributeListener类

1、先需要配置项目下的web.xml

  <listener>

    <listener-class>com.baidu.controller.SessionListener</listener-class>
  </listener>

2、代码贴上

public static Map<String, HttpSession> sessionMap = new HashMap<String, HttpSession>();

private HttpServletRequest request;

public void attributeAdded(HttpSessionBindingEvent event) {
        String name = event.getName();
        if("user".equals(name)){
            User user = (User) event.getValue();
            if (sessionMap.get(user.getUsername()) != null) {  
                HttpSession session = sessionMap.get(user.getUsername());  
                session.removeAttribute(user.getUsername());  
                session.invalidate();  
            }
            sessionMap.put(user.getUsername(), event.getSession());
        }    
}

public void attributeRemoved(HttpSessionBindingEvent event) {
        String name = event.getName(); 
        if (name.equals("user")) {  
            User user = (User) event.getValue();  
            sessionMap.remove(user.getUsername()); 
        }            // TODO Auto-generated method stub   
}

public static Map<String, HttpSession> getSessionMap() {
        return sessionMap;
}
public static void setSessionMap(Map<String, HttpSession> sessionMap) {
  SessionListener.sessionMap = sessionMap;
}

以上基本实现了当前用户顶掉前面登录用户的效果。还是有很多漏洞这种方法,对于简单的实现来说可以将就。

时间: 2024-12-11 07:34:52

java做单用户的多重并发会话数限制的相关文章

powerpivot 2013 已超出每个用户的最大允许会话数 The maximum numberof allowed sessions for each user has exceeded

打开已经做好的powerpivot文件之后,出现如下错误: 已超出每个用户的最大允许会话数 The maximum numberof allowed sessions for each user has exceeded 解决方法是,在管理中心,excel services应用程序中,全局配置,里面的会话管理中,将"每个用户的最大会话数"由25,改成250. 重新浏览后,页面正常.

Oracle 连接、会话数的查看,修改

http://blog.csdn.net/xiaoyao6650/article/details/4027041 查看processes #当前的连接数 select count(*) from v$process; #数据库允许的连接数 select value from v$parameter where name = 'processes'; #查看连接配置信息 show parameter processes; #修改连接数 alter system set processes = [v

Java_并发工具包 java.util.concurrent 用户指南(转)

译序 本指南根据 Jakob Jenkov 最新博客翻译,请随时关注博客更新:http://tutorials.jenkov.com/java-util-concurrent/index.html.本指南已做成中英文对照阅读版的 pdf 文档,有兴趣的朋友可以去 Java并发工具包java.util.concurrent用户指南中英文对照阅读版.pdf[带书签] 进行下载. 1. java.util.concurrent - Java 并发工具包 Java 5 添加了一个新的包到 Java 平台

Windows 2008 关闭远程桌面的单用户多会话模式

Windows 2008 关闭远程桌面的单用户多会话模式 在腾讯云上购买了一台云服务器. 因为设置了自动登录,在远程桌面连接后会启动一个新的会话,然后软件被运行了两次,端口被占用,无法起动. 还有可能会造成程序出错,因为用的同一个数据库. 在这里可以关闭. 原文地址:https://www.cnblogs.com/F4NNIU/p/9860729.html

用java实现一个简单的单用户登陆功能的思路

引用 所谓"单用户单账户登录"是指:在同一系统中,一个用户名不能在两个地方同时登录. 我们参照 QQ 实现效果:当某账号在 A 处登录后,在未退出的情况下,如果再到 B 处登录,那么,系统会挤下 A 处登录的账号. 要实现这样一个功能,如果我们项目使用了springmvc我们可以使用拦截器来替代过滤器,否则我们使用过滤器也可以实现,我们需要一个这样的东西来进行拦截用户的请求.我们的user表里也需要添加一个token字段,用于存放当前登录者的一个唯一标识. 大致的思路是这样的: 用户A

Java 面试知识点解析(二)——高并发编程篇

前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大部分内容参照自这一篇文章,有一些自己补充的,也算是重新学习一下 Java 吧. 前序文章链接: Java 面试知识点解析(一)--基础知识篇 (一)高并发编程基础知识 这里涉及到一些基础的概念,我重新捧起了一下<实战 Java 高并发程序设计>这一本书,感觉到心潮澎湃,这或许就是笔者叙述功底扎实的

Java与Netty实现高性能高并发

1. 背景 1.1. 惊人的性能数据 最近一个圈内朋友通过私信告诉我,通过使用Netty4 + Thrift压缩二进制编解码技术,他们实现了10W TPS(1K的复杂POJO对象)的跨节点远程服务调用.相比于传统基于Java序列化+BIO(同步阻塞IO)的通信框架,性能提升了8倍多. 事实上,我对这个数据并不感到惊讶,根据我5年多的NIO编程经验,通过选择合适的NIO框架,加上高性能的压缩二进制编解码技术,精心的设计Reactor线程模型,达到上述性能指标是完全有可能的. 下面我们就一起来看下N

Spring框架整合Struts2使用Validation框架验证表单用户输入数据的详细教程

原创整理不易,转载请注明出处:Spring框架整合Struts2使用Validation框架验证表单用户输入数据的详细教程 代码下载地址:http://www.zuidaima.com/share/1778685765291008.htm 在<Struts2教程4:使用validate方法验证数据>中曾讲到使用validate方法来验证客户端提交的数据,但如果使用validate方法就会将验证代码和正常的逻辑代码混在一起,但这样做并不利于代码维护,而且也很难将过些代码用于其他程序的验证.在St

Java EE : 三、图解Session(会话)

目录 Java EE : 一.图解Http协议 Java EE : 二.图解 Cookie(小甜饼) Java EE : 三.图解Session(会话) 概述 一.Session由来 二.Session机制 三.详细介绍Seesion机制过程 四.补充 五.总结 参考 一.Session由来 HTTP的无状态,也就是说,每次请求都是独立的线程.举个例子吧:购物中,你选择了A商品,加入购物车,这就是A线程.然后在选择B商品就是B线程.可是每次线程独立(对容器而言,A.B成了不同的用户),线程A不知