我的Web应用程序是使用servlet和struts构建的。我希望跟踪该应用程序的会话登录总数。
如果登录次数超过一定限度,我将拒绝登录。如何将会话总数从HttpSession传递给我的struts Action类或Servlet?
答案 0 :(得分:2)
public class HttpSessionListener implements HttpSessionListener {
private static final AtomicInteger sessionCount = new AtomicInteger(0);
@Override
public void sessionCreated(HttpSessionEvent event) {
sessionCount.incrementAndGet();
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
sessionCount.decrementAndGet();
}
public static int getTotalSessionCount() {
return sessionCount.get();
}
}
原始Integer不是线程安全的。使用上面的解决方案,您可以使用HttpSessionListener.getTotalSessionCount()获取打开会话的计数。代码模型来自this answer。
答案 1 :(得分:0)
你必须使用HttpSessionListener并有一个如下的静态字段:
public class SessionCounterListener implements HttpSessionListener {
public static int totalActiveSessions;
@Override
public void sessionCreated(HttpSessionEvent arg0) {
totalActiveSessions++;
}
@Override
public void sessionDestroyed(HttpSessionEvent arg0) {
totalActiveSessions--;
}
}
并从以下任何地方访问它:
SessionCounterListener .totalActiveSessions
请给我一些反馈
希望有所帮助。
答案 2 :(得分:0)
别忘了添加
<listener>
<listener-class>dev.myContextListenerClass</listener-class>
</listener>