在登录方法中加入如下两行语句,作为程序的入口:

SessionListener.isAlreadyEnter(getHttpRequest().getSession(),this.getUserCode(),loginUser)

getHttpRequest().getSession().setAttribute("isLoginIn", "LoginIn");

在SessionListener类中做相关的踢出处理:

    1. import java.util.HashMap;
    2.  
      import java.util.Iterator;
    3.  
      import java.util.Map;
    4.  
      import javax.servlet.ServletRequestEvent;
    5.  
      import javax.servlet.ServletRequestListener;
    6.  
      import javax.servlet.http.HttpServletRequest;
    7.  
      import javax.servlet.http.HttpSession;
    8.  
      import javax.servlet.http.HttpSessionAttributeListener;
    9.  
      import javax.servlet.http.HttpSessionBindingEvent;
    10.  
      import javax.servlet.http.HttpSessionEvent;
    11.  
      import javax.servlet.http.HttpSessionListener;
    12.  
      import org.apache.struts2.ServletActionContext;
    13.  
      import com.hhwy.iepip.framework.message.Message;
    14.  
      import com.opensymphony.xwork2.ActionContext;
    15.  
       
    16.  
      public class SessionListener implements HttpSessionListener,ServletRequestListener,HttpSessionAttributeListener{
    17.  
      public static Map<String, HttpSession> sessionMap = new HashMap<String, HttpSession>();
    18.  
      public static Map<String, HttpSession> sessionMap1 = new HashMap<String, HttpSession>();
    19.  
      private static Boolean onlyOne = Boolean.valueOf(Message.getMessage("session.onlyone"));
    20.  
      private HttpServletRequest request ;
    21.  
       
    22.  
      /**获取request对象*/
    23.  
      public void requestInitialized(ServletRequestEvent event) {
    24.  
      request = (HttpServletRequest)event.getServletRequest();
    25.  
      }
    26.  
       
    27.  
      /**以下是实现HttpSessionListener中的方法:该方法登录与否都会执行**/
    28.  
      public void sessionCreated(HttpSessionEvent se){
    29.  
      }
    30.  
       
    31.  
      /**以下是实现HttpSessionListener中的方法**/
    32.  
      public void sessionDestroyed(HttpSessionEvent se){
    33.  
      hUserName.remove(se.getSession().getId());
    34.  
      UserObject.remove(se.getSession().getId());
    35.  
      if(sessionMap!=null){
    36.  
      sessionMap.remove(se.getSession().getId());
    37.  
      }
    38.  
      if(sessionMap1!=null){
    39.  
      sessionMap1.remove(se.getSession().getId());
    40.  
      }
    41.  
      }
    42.  
      /**
    43.  
      * isAlreadyEnter-用于判断用户是否已经登录以及相应的处理方法
    44.  
      * <该方法是系统业务的方法,不是处理单个用户登录的问题,以该方法做为程序的入口>
    45.  
      */
    46.  
      public static boolean isAlreadyEnter(HttpSession session,String sUserName,LoginUserInfo loginTriggers){
    47.  
      boolean flag = false;
    48.  
      return flag;
    49.  
      }
    50.  
       
    51.  
      /**
    52.  
      * 此方法,可以在登录时候添加一个session 用以判断是否已经登录,然后再进行登录人登录控制
    53.  
      */
    54.  
      public void attributeAdded(HttpSessionBindingEvent event) {
    55.  
      //如果只允许一个账号一处登陆,单台客户端电脑只允许一个用户登录
    56.  
      if(onlyOne.booleanValue()){
    57.  
      String name = event.getName();
    58.  
      if(name.equals("isLoginIn")){
    59.  
      // 单台客户端电脑只允许一个用户登录
    60.  
      String ipAddr = this.getIpAddr(request);
    61.  
      //如果原先已登录,则踢出原先登陆的
    62.  
      if(sessionMap1.containsKey(ipAddr) ){
    63.  
      try{
    64.  
      sessionMap1.get(ipAddr).invalidate();
    65.  
      }catch(Exception e){}
    66.  
      sessionMap1.remove(ipAddr);
    67.  
      }
    68.  
      if(ipAddr != null && event.getSession().isNew())
    69.  
      sessionMap1.put(ipAddr, event.getSession());
    70.  
       
    71.  
      //只允许一个账号一个客户端登陆
    72.  
      String userName= getUserName(event);
    73.  
      if(sessionMap.containsKey(userName) ){
    74.  
      try{
    75.  
      sessionMap.get(userName).invalidate();
    76.  
      }catch(Exception e){}
    77.  
      sessionMap.remove(userName);
    78.  
      }
    79.  
      if(userName != null && event.getSession().isNew())
    80.  
      sessionMap.put(userName, event.getSession());
    81.  
      }
    82.  
      }
    83.  
      }
    84.  
       
    85.  
      public static String getIpAddr(HttpServletRequest request) {
    86.  
      String ip = request.getHeader("x-forwarded-for");
    87.  
      if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
    88.  
      ip = request.getHeader("Proxy-Client-IP");
    89.  
      }
    90.  
      if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
    91.  
      ip = request.getHeader("WL-Proxy-Client-IP");
    92.  
      }
    93.  
      if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
    94.  
      ip = request.getRemoteAddr();
    95.  
      }
    96.  
      return ip;
    97.  
      }
    98.  
       
    99.  
      /*获取session中存储的用户名*/
    100.  
      private String getUserName(HttpSessionBindingEvent se) {
    101.  
      String userName = null;
    102.  
      return userName;
    103.  
      }
    104.  
       
    105.  
      public void attributeRemoved(HttpSessionBindingEvent event) {
    106.  
      // TODO Auto-generated method stub
    107.  
      }
    108.  
       
    109.  
      public void attributeReplaced(HttpSessionBindingEvent arg0) {
    110.  
      // TODO Auto-generated method stub
    111.  
      }
    112.  
       
    113.  
      public void requestDestroyed(ServletRequestEvent arg0) {
    114.  
      // TODO Auto-generated method stub
    115.  
      }
    116.  

SSH版最大会话连接数的更多相关文章

  1. 《linux就该这么学》课堂笔记13 网络会话、ssh、远程会话

    1.常见的网卡绑定驱动有三种模式—mode0.mode1和mode6 mode0(平衡负载模式):平时两块网卡均工作,且自动备援,但需要在与服务器本地网卡相连的交换机设备上进行端口聚合来支持绑定技术. ...

  2. ORA-00020: maximum number of processes (40) exceeded模拟会话连接数满

    问题描述:在正式生产环境中,有的库建的process和session连接数目设置的较小,导致后期满了无法连接.因为正式库无法进行停库修改,只能释放连接,做个测试模拟 1. 修改现有最大会话与进程连接数 ...

  3. 解决SSH会话连接超时问题

    用SSH客户端连接linux服务器时,经常会出现与服务器会话连接中断现象,照成这个问题的原因便是SSH服务有自己独特的会话连接机制.记得在一年前就有朋友问过我这个问题,那时候我便是草草打发,结果自己现 ...

  4. 阿里云(ECS)Linux客户端SSH会话连接超时OperationTimedOut

    问题描述:使用SecureCRT等SSH客户端连接Linux服务器时,提示Operation timed out. 问题原因:SSH服务未配置或注释掉向SSH客户端连接会话发送频率和时间. 解决方法: ...

  5. SSH的端口转发:本地转发Local Forward和远程转发Remote Forward

    关于使用ssh portforwarding来进行FQ的操作,网络上已经有很多很好的文章,我在这里只是画两个图解释一下. 首先要记住一件事情就是: SSH 端口转发自然需要 SSH 连接,而 SSH ...

  6. Android手机SSH Client客户端推荐JuiceSSH

    Windows上建立ssh服务器 参见: http://www.cnblogs.com/xred/archive/2012/04/21/2461627.html Android手机SSH Client ...

  7. SSH服务端配置、优化加速、安全防护

    CentOS7自带的SSH服务是OpenSSH中的一个独立守护进程SSHD.由于使用telnet在网络中是明文传输所以用其管理服务器是非常不安全的不安全,SSH协议族可以用来对服务器的管理以及在计算机 ...

  8. Redhat 6.7 x64升级SSH到OpenSSH_7.4p1完整文档

    原文链接:https://www.cnblogs.com/xshrim/p/6472679.html 导语 Redhat企业级系统的6.7版自带SSH版本为OpenSSH_5.3p1, 基于审计和安全 ...

  9. SSH的端口转发

    这里是一篇很好的介绍SSH PortForwarding的文章http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/ 可以将远端服务器一 ...

随机推荐

  1. Devexpress VCL Build v2014 vol 14.2.4 发布

    What's New in 14.2.4 (VCL Product Line)   New Major Features in 14.2 What's New in VCL Products 14.2 ...

  2. 2018.10.21 codeforces1071B. Minimum path(dp+贪心+bfs)

    传送门 唉考试的时候写错了两个细节调了一个多小时根本没调出来. 下来又调了半个小时才过. 其实很简单. 我们先dpdpdp出最开始最多多少个连续的aaa. 然后对于没法继续连续下去的用贪心+bfsbf ...

  3. 2018.10.19 NOIP训练 yk赚钱记(01分数规划)

    传送门 其实是一个裸的最优比率生成树. 注意精度的控制就行了. 代码

  4. 32. My Experiences in the Factories 我在工厂的经历

    32. My Experiences in the Factories 我在工厂的经历 ① I've worked in the factories surrounding my hometown e ...

  5. 第九章:叹词(L'interjection )

    ➊叹词的使用词类 .拟声词.如:    Ah !啊!呀!哎!      Hein  !嗯!呣!哎!    Paf  !啪!叭!             Pouf  !扑通(重物坠地声)    Euh ...

  6. python操作数据库-安装

    首先是下载软件: 链接:http://pan.baidu.com/s/1nvp1imX 密码:6i0x 之后就是一系列设置. 安装教程:自行百度就行.需要注意的是设置my.ini时,需要加上这些东西( ...

  7. IntelliJ IDEA 2017版 SpringBoot的关闭自动配置和自定义Banner

    一.关闭自动配置 在jar包下找下边的名字    设置关闭自动配置jar    多个的时候配置       二.自定义Banner   (1)网站搜索一个图案.网址:http://patorjk.co ...

  8. spss-非参数检验-K多个独立样本检验( Kruskal-Wallis检验)案例解析

    今天和大家一起探讨和分下一下SPSS-非参数检验--K个独立样本检验 ( Kruskal-Wallis检验). 还是以SPSS教程为例: 假设:HO:   不同地区的儿童,身高分布是相同的 H1: 不 ...

  9. org.springframework spring-test

    需要的jar包 <dependency> <groupId>org.springframework</groupId> <artifactId>spri ...

  10. x11vnc配置--ubuntu14.04

    x11vnc是连接到真实的X会话,相比vnc4server和tightvncserver自己创建不同分辨率的xserver来说,画面延时和显示效果应该要好一些.两种服务都试过,个人感觉x11vnc要好 ...