使用HttpSessionListener跟踪Web应用程序中的会话总数

时间:2014-02-04 12:13:58

标签: java servlets struts

我的Web应用程序是使用servlet和struts构建的。我希望跟踪该应用程序的会话登录总数。

如果登录次数超过一定限度,我将拒绝登录。如何将会话总数从HttpSession传递给我的struts Action类或Servlet?

3 个答案:

答案 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>