鉴于此,
我有一个
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/