我使用Filter接口实现了一个Http过滤器,它在localhost中工作正常。 问题是,在测试环境中,当两个用户想要访问应用程序时,此过滤器不会像往常一样工作。它混合了两个用户之间的数据。我知道,因为我有很多日志每时每刻报告我的步骤。我不知道同时访问是否有任何问题。
答案 0 :(得分:0)
与servlet一样,过滤器是应用程序作用域。在应用程序启动期间只创建了一个过滤器类的实例,并且在整个应用程序的生命周期中,所有HTTP请求都会重复使用同一个实例。您的问题症状表明您出于某种原因将请求或会话范围变量分配为过滤器实例的实例变量,例如请求参数或会话属性,或者甚至是整个请求或会话对象本身。
例如,
public class MyFilter implements Filter {
private String someParam;
public void doFilter(... ...) {
someParam = request.getParameter("someParam");
// ...
}
}
不线程安全!您应该在方法本地范围内声明它们:
public class MyFilter implements Filter {
public void doFilter(... ...) {
String someParam = request.getParameter("someParam");
// ...
}
}