鉴于此,
我有一个
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&甲骨文。
答案 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
}
}