这个问题已经在这里有了答案: > Java time-based map/cache with expiring keys [closed] 10个
我有一个要求,我需要确保没有用户可以进行多次登录
因此,为此,我将其登录系统集中化,一旦用户成功登录,我会将其存储在Authenticator类中,如下所示:
如下所示,并在用户单击注销后将其从HashMap中删除
public final class Authenticator {
private static Authenticator authenticator = null;
Map usersStorage = new HashMap();
private Authenticator() {}
public static Authenticator getInstance() {
if ( authenticator == null ) {
authenticator = new Authenticator();
}
return authenticator;
}
public Map getusersStorage() {
return usersStorage;
}
}
到目前为止,一切都很好.
我也有一些负面的情况要处理
>用户无需单击注销即可关闭浏览器(Ctrl W /浏览器十字标记按钮)
在这种情况下,如果空闲了15分钟,则可以从HashMap中删除键和值.
请分享您达到这个要求的想法.
解决方法:
基本上,您需要的是会话管理.当用户登录时,启动会话并在用户对您的网站执行任何操作时继续刷新会话.并且,如果用户在一定时间内不活动(会话超时),则从会话存储中删除该用户.
如果您对此会话管理不感兴趣,并且只想使用Map这样的技术,则可以使用任何Cache机制(例如:EhCache).它将完全满足您的要求.但是对于这种特定情况,我更喜欢会话管理.
标签:java
来源: https://codeday.me/bug/20191120/2042275.html