如何仅根据 SessionID 终止任何会话

How to kill any session on basis of just SessionID

鉴于此,

我有一个

USER_ACTIVITY_LOG table

包含

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

在那。它根据 UserId 和 SessionId 更新 table 中应用程序执行的所有活动。

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

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

我必须在每次用户登录时查询 USER_ACTIVITY_LOG table 并检查使用相同用户 ID 登录且未注销的用户数。 如果我得到 2 个仍在登录的用户的计数,我只想 使最老用户的会话 仅基于 SESSION_ID

这可能吗?

我的项目在 Java 8、Jboss 6.4、J2EE、Struts 2 和 Oracle 上。

这是我发现的修复方法,目前我正在使用它。不管怎样都会对性能有一点影响。

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
    }

}