如何根据SessionID

时间:2018-04-18 14:02:26

标签: java session session-variables session-state httpsession

鉴于此,

我有一个

  

USER_ACTIVITY_LOG表

包含

  

USER_ID,SESSION_ID,ACTIVITY_CODE(Login / LogOut / TimeOut)&   ACTIVITY_TIME列

在那。它基于UserId& amp;更新表中应用程序上执行的所有活动。的SessionID。

问题陈述: 我想在我的应用程序上使用相同的凭据将登录限制为最多2个用户。

一次说2个用户使用相同的凭据登录到应用程序(例如:admin / admin),现在第3个用户正在尝试使用相同的凭据登录应用程序。在这种情况下,最早登录的用户会话应该无效。

我必须在每次用户登录时查询 USER_ACTIVITY_LOG 表,并检查使用相同userId登录的用户数,并且不会注销。 如果我计算了仍然登录的2个用户,我只想基于 SESSION_ID 使最老用户的会话无效。

这可能吗?

我的项目是Java 8,Jboss 6.4,J2EE,Struts 2&甲骨文。

1 个答案:

答案 0 :(得分:1)

这是我发现的修复程序,我现在正在使用它。无论如何都会影响性能。

public void expireSessionWithId(String sessionID)
{  
     try { 
        MBeanServer server = java.lang.management.ManagementFactory.getPlatformMBeanServer();

        ObjectName objectName=new ObjectName("jboss.web:type=Manager,path=/test,host=default-host");

        // declare signature of the parameter
        String[] sig = { "java.lang.String"};
        // declare parameter
        Object[] opArgs1 = { sessionID };
        // call the method
        String value = (String) server.invoke(objectName, "expireSession",
                opArgs1, sig);

        System.out.println(value);
    } catch (MalformedObjectNameException e) {
        //handle the exception
    } catch (InstanceNotFoundException e) {
        //handle the exception
    } catch (ReflectionException e) {
        //handle the exception
    } catch (MBeanException e) {
        //handle the exception
    }

}