限制访问Java Web应用程序的用户数量

4
我的问题与限制访问Web ASP .NET应用程序的用户数量相同,但我正在寻找Java6 Tomcat7和Struts 2的解决方案。
要求:
  1. 仅有N个用户可以同时登录。
  2. 同一用户不能从另一个系统/浏览器登录。
  3. 如果第N+1个用户尝试登录,则显示消息并拒绝登录。
  4. 如何处理用户未正常注销(关闭浏览器/会话超时/网络问题等)?
我正在考虑使用静态映射,并为登录和注销创建条目。你能提供任何建议/想法吗? 谢谢! -Jiggi
2个回答

3
您可以使用以下代码计算活动会话的数量。
public class SessionCounter implements HttpSessionListener {  

     private static int activeSessions = 0;  

    public void sessionCreated(HttpSessionEvent se) {  
        activeSessions++;  
    }  

     public void sessionDestroyed(HttpSessionEvent se) {  
        if(activeSessions > 0)  
            activeSessions--;  
    }  


     public static int getActiveSessions() {  
        return activeSessions;  
     }  
 }  

这样你就可以限制会话数。例如:如果活动会话数为20,则不创建更多会话。


1
您可能需要在一个表中保留用户的状态。
1)选择计数(*)从用户中,其中状态=1--假设1表示已登录
2)选择状态从用户中,其中名称=?
3)如果sql中的1返回太多,请拒绝登录
4)超时。恐怕这是在无状态网络世界中唯一有效的方法。如果用户30分钟(或任何超时时间)没有进行检查,则将其设置为已注销。用户的任何操作都应构成“检查”。
除了简单的状态指示器外,您还可以保留“最后活动日期”,如果一段时间内没有记录任何活动,它也可以起到自动超时的作用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接