我正在使用wicket-auth-roles,特别是'AuthenticatedWebApplication'来保护我的wicket应用程序中的页面。我想禁止用户使用相同的登录名从多个位置登录。目前,用户似乎可以从两台不同的计算机登录同一用户。
我确信它与第一个用户的会话无效一样容易,但是当第二个用户出现时,我不知道如何从我的AuthenticatedWebApplication中获取它。任何指导赞赏。
由于 马特
答案 0 :(得分:1)
通过实施HttpSessionListener(example),您可以监控会话的创建和销毁时间。
我建议在会话中使用user_id字段,并在创建时将会话添加到地图中。
您将新会话与此地图中的会话进行比较,并确保用户ID不同。
如果它们相同,则用户已登录,因此使新会话无效,禁止登录。
答案 1 :(得分:0)
如果我打算这样做,我会尝试像
这样的东西class MyApplication ...
{
@Override
protected void init()
{
getRequestCycleListeners().add(new SessionGuard());
}
}
class SessionGuard extends AbstractRequestCycleListener
{
@Override
public void onBeginRequest(final RequestCycle cycle)
{
final MySession session = MySession.class.cast(Session.get());
if(session.isSignedIn())
{
final String validSessionId = session.getUser().getLastAuthenticatedSessionId();
if(!session.getId().equals(validSessionId))
{
session.invalidate();
}
}
}
}