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