如何仅根据 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
}
}
鉴于此,
我有一个
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
}
}