SSH版最大会话连接数
在登录方法中加入如下两行语句,作为程序的入口:
SessionListener.isAlreadyEnter(getHttpRequest().getSession(),this.getUserCode(),loginUser)
getHttpRequest().getSession().setAttribute("isLoginIn", "LoginIn");
在SessionListener类中做相关的踢出处理:
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.Map;
- import javax.servlet.ServletRequestEvent;
- import javax.servlet.ServletRequestListener;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpSession;
- import javax.servlet.http.HttpSessionAttributeListener;
- import javax.servlet.http.HttpSessionBindingEvent;
- import javax.servlet.http.HttpSessionEvent;
- import javax.servlet.http.HttpSessionListener;
- import org.apache.struts2.ServletActionContext;
- import com.hhwy.iepip.framework.message.Message;
- import com.opensymphony.xwork2.ActionContext;
- public class SessionListener implements HttpSessionListener,ServletRequestListener,HttpSessionAttributeListener{
- public static Map<String, HttpSession> sessionMap = new HashMap<String, HttpSession>();
- public static Map<String, HttpSession> sessionMap1 = new HashMap<String, HttpSession>();
- private static Boolean onlyOne = Boolean.valueOf(Message.getMessage("session.onlyone"));
- private HttpServletRequest request ;
- /**获取request对象*/
- public void requestInitialized(ServletRequestEvent event) {
- request = (HttpServletRequest)event.getServletRequest();
- }
- /**以下是实现HttpSessionListener中的方法:该方法登录与否都会执行**/
- public void sessionCreated(HttpSessionEvent se){
- }
- /**以下是实现HttpSessionListener中的方法**/
- public void sessionDestroyed(HttpSessionEvent se){
- hUserName.remove(se.getSession().getId());
- UserObject.remove(se.getSession().getId());
- if(sessionMap!=null){
- sessionMap.remove(se.getSession().getId());
- }
- if(sessionMap1!=null){
- sessionMap1.remove(se.getSession().getId());
- }
- }
- /**
- * isAlreadyEnter-用于判断用户是否已经登录以及相应的处理方法
- * <该方法是系统业务的方法,不是处理单个用户登录的问题,以该方法做为程序的入口>
- */
- public static boolean isAlreadyEnter(HttpSession session,String sUserName,LoginUserInfo loginTriggers){
- boolean flag = false;
- return flag;
- }
- /**
- * 此方法,可以在登录时候添加一个session 用以判断是否已经登录,然后再进行登录人登录控制
- */
- public void attributeAdded(HttpSessionBindingEvent event) {
- //如果只允许一个账号一处登陆,单台客户端电脑只允许一个用户登录
- if(onlyOne.booleanValue()){
- String name = event.getName();
- if(name.equals("isLoginIn")){
- // 单台客户端电脑只允许一个用户登录
- String ipAddr = this.getIpAddr(request);
- //如果原先已登录,则踢出原先登陆的
- if(sessionMap1.containsKey(ipAddr) ){
- try{
- sessionMap1.get(ipAddr).invalidate();
- }catch(Exception e){}
- sessionMap1.remove(ipAddr);
- }
- if(ipAddr != null && event.getSession().isNew())
- sessionMap1.put(ipAddr, event.getSession());
- //只允许一个账号一个客户端登陆
- String userName= getUserName(event);
- if(sessionMap.containsKey(userName) ){
- try{
- sessionMap.get(userName).invalidate();
- }catch(Exception e){}
- sessionMap.remove(userName);
- }
- if(userName != null && event.getSession().isNew())
- sessionMap.put(userName, event.getSession());
- }
- }
- }
- public static String getIpAddr(HttpServletRequest request) {
- String ip = request.getHeader("x-forwarded-for");
- if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
- ip = request.getHeader("Proxy-Client-IP");
- }
- if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
- ip = request.getHeader("WL-Proxy-Client-IP");
- }
- if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
- ip = request.getRemoteAddr();
- }
- return ip;
- }
- /*获取session中存储的用户名*/
- private String getUserName(HttpSessionBindingEvent se) {
- String userName = null;
- return userName;
- }
- public void attributeRemoved(HttpSessionBindingEvent event) {
- // TODO Auto-generated method stub
- }
- public void attributeReplaced(HttpSessionBindingEvent arg0) {
- // TODO Auto-generated method stub
- }
- public void requestDestroyed(ServletRequestEvent arg0) {
- // TODO Auto-generated method stub
- }
SSH版最大会话连接数的更多相关文章
- 《linux就该这么学》课堂笔记13 网络会话、ssh、远程会话
1.常见的网卡绑定驱动有三种模式—mode0.mode1和mode6 mode0(平衡负载模式):平时两块网卡均工作,且自动备援,但需要在与服务器本地网卡相连的交换机设备上进行端口聚合来支持绑定技术. ...
- ORA-00020: maximum number of processes (40) exceeded模拟会话连接数满
问题描述:在正式生产环境中,有的库建的process和session连接数目设置的较小,导致后期满了无法连接.因为正式库无法进行停库修改,只能释放连接,做个测试模拟 1. 修改现有最大会话与进程连接数 ...
- 解决SSH会话连接超时问题
用SSH客户端连接linux服务器时,经常会出现与服务器会话连接中断现象,照成这个问题的原因便是SSH服务有自己独特的会话连接机制.记得在一年前就有朋友问过我这个问题,那时候我便是草草打发,结果自己现 ...
- 阿里云(ECS)Linux客户端SSH会话连接超时OperationTimedOut
问题描述:使用SecureCRT等SSH客户端连接Linux服务器时,提示Operation timed out. 问题原因:SSH服务未配置或注释掉向SSH客户端连接会话发送频率和时间. 解决方法: ...
- SSH的端口转发:本地转发Local Forward和远程转发Remote Forward
关于使用ssh portforwarding来进行FQ的操作,网络上已经有很多很好的文章,我在这里只是画两个图解释一下. 首先要记住一件事情就是: SSH 端口转发自然需要 SSH 连接,而 SSH ...
- Android手机SSH Client客户端推荐JuiceSSH
Windows上建立ssh服务器 参见: http://www.cnblogs.com/xred/archive/2012/04/21/2461627.html Android手机SSH Client ...
- SSH服务端配置、优化加速、安全防护
CentOS7自带的SSH服务是OpenSSH中的一个独立守护进程SSHD.由于使用telnet在网络中是明文传输所以用其管理服务器是非常不安全的不安全,SSH协议族可以用来对服务器的管理以及在计算机 ...
- Redhat 6.7 x64升级SSH到OpenSSH_7.4p1完整文档
原文链接:https://www.cnblogs.com/xshrim/p/6472679.html 导语 Redhat企业级系统的6.7版自带SSH版本为OpenSSH_5.3p1, 基于审计和安全 ...
- SSH的端口转发
这里是一篇很好的介绍SSH PortForwarding的文章http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/ 可以将远端服务器一 ...
随机推荐
- [远程] windows 2008 server设置了共享文件夹,并且共享给了everyone,但是还是无法访问,怎么解决呢?
还需要设置另外一个地方,将用户加到MSAppAccess这个组里去
- String [] args是干什么的
我相信应该有不少人都疑惑,main后面的这个String [] args是干什么的呢?今天,巩固就为你们解密. 这是干什么的呢?先给大家一个简单定义(本人比较讨厌上来就举例子,因为 ...
- 多网卡的7种bond模式原理 For Linux
多网卡的7种bond模式原理 Linux 多网卡绑定 网卡绑定mode共有七种(0~6) bond0.bond1.bond2.bond3.bond4.bond5.bond6 常用的有三种 mode=0 ...
- 2018.06.30 BZOJ4443: [Scoi2015]小凸玩矩阵(二分加二分图匹配)
4443: [Scoi2015]小凸玩矩阵 Time Limit: 10 Sec Memory Limit: 128 MB Description 小凸和小方是好朋友,小方给小凸一个N*M(N< ...
- ardunio 实现RS485通讯-下位机
#include <SoftwareSerial.h> SoftwareSerial mySerial(,); byte ZERO=0x00; byte Addr=0x03; byte S ...
- Unit Testing of Spring MVC
试验1:做的条目不发现首先,我们必须确保我们的应用是工作性质所做条目不发现.我们可以写的测试以确保通过以下步骤: 1.配置的模拟对象时抛出一个todonotfoundexception findbyi ...
- Yarn上运行spark-1.6.0
目录 目录 1 1. 约定 1 2. 安装Scala 1 2.1. 下载 2 2.2. 安装 2 2.3. 设置环境变量 2 3. 安装Spark 2 3.1. 下载 2 3.2. 安装 2 3.3. ...
- 第一章 JVM内存结构
注意:本系列博客,主要参考自以下四本书 <分布式Java应用:基础与实践><深入理解Java虚拟机(第二版)><深入分析Java web技术内幕><实战jav ...
- C++互斥器:Mutex
互斥器的功能是,使多个线程和谐工作.同一时间内,只能有一个线程得到互斥对象,并获得资源操作权限,那么如果同一时间其他线程也想去操作资源,此时就会因为Mutex未处于激发状态,而无奈的等待…这时候,线程 ...
- Python学习(一)——数据类型
在大学学过一点python,只学了语法,关于实际应用却没怎么用过.现在用一些python的脚本来模拟webservices,挺好用的.这个语言,还是要好好学习学习了. 目前看着教材来的,这本教材,好像 ...