使用Tomcat防止来自同一台PC的并发用户会话

时间:2012-03-20 16:12:43

标签: session tomcat concurrency

我在这里看了几个关于SO的好例子 How to Prevent Concurrent User Logins in PHP/MySQL Site? 他们描述了我正在尝试解决的问题。基本上只允许给定用户一次打开一个且仅一个会话,无论是来自同一台PC还是两台不同的PC。 因此,查询DB以获取LoggedIN / Not LoggedIN标志是最简单的可行解决方案。 如何实现这是我的问题 在每次请求页面时运行的每个页面都添加了会话验证,这是不可行的,因为它需要修改我们所有的JSP(很长一段时间但我们没有常见的Header文件) 有没有什么办法可以重新配置Tomcat来对查询数据库的每个请求运行一些验证检查?也许使用阀门或其他方法?我没有很多Tomcat经验,所以这就是我问的原因。 日Thnx

1 个答案:

答案 0 :(得分:2)

您可以查看使用Filter而不是更改所有JSP文件。过滤器将允许您拦截请求并对请求执行某种级别的验证。

然后,您决定检查活动会话由您决定。

public class SessionCheckFilter implements Filter {
   public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) 
     throws IOException, ServletException {

   //Your validation code here.
   boolean returnValue = YourClass.performSessionValidation();
   if(returnValue){
      //Do Something
   }else{
     //Do Something else
   }

   //standard filter call
   chain.doFilter(req, res);
}

然后在web.xml中将servlet映射到您的代码。 (根据您的需要改变)

<filter>
    <filter-name>SessionCheckFilter</filter-name>
    <filter-class>com.stackoverflow.SessionCheckFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>SessionCheckFilter</filter-name>
    <url-pattern>*.jsp</url-pattern>
</filter-mapping>

有关详情,请参阅SO

上的servlet-filter信息页