java - 如何仅根据 SessionID 终止任何 session

标签 java session session-variables session-state httpsession

鉴于此,

我有一个

USER_ACTIVITY_LOG table

包含

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

在那。它根据 UserId 和 SessionId 更新表中应用程序上执行的所有 Activity 。

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

假设一次有 2 个用户使用相同的凭据(例如:admin/admin)登录应用程序,现在第三个用户正在尝试使用相同的凭据登录应用程序。在这种情况下,最早登录的用户 session 应该失效。

我必须在每个用户登录时查询USER_ACTIVITY_LOG表,并检查使用相同用户ID登录且未注销的用户数量。 如果我得到仍然登录的 2 个用户的计数,我只想根据 SESSION_ID使最早的用户的 session 无效

这可能吗?

我的项目基于 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
    }

}

关于java - 如何仅根据 SessionID 终止任何 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49901758/

相关文章:

java - 如何使用 DOM 解析此 XML 并将其内容放入哈希表中?

ruby-on-rails - rails 3 : Disable session cookies

java - Node.js 有状态服务器

session-variables - codeigniter sess_destroy() 无法正常工作,我做错了什么?

java - Servlet session 属性的多态性

java - 如果 TimerTask 的执行时间比指定的时间间隔长,会发生什么?

java - 图像按钮未在 Android 模拟器中显示

java - 将公共(public) API 转换为内部胶水代码时避免强制转换

php - 在 Laravel 5.1 中更改 session 文件名

session - 如何在 meteor 中将正则表达式发送到服务器端