我在使用 struts 2 应用程序时遇到问题。用户 1 成功登录并被重定向到某个页面。之后,用户 2 尝试从她的机器登录,她被重定向到用户 1 的登录页面。
我不确定这是 Web 容器(Web 逻辑)的问题还是我的编码中的一些问题。我无法弄清楚我可能会出错的地方以及服务器如何从另一个用户会话中提供数据。
登录操作实现了 sessionaware,我为 session Map 设置了 setter 和 getter。如果登录操作返回成功,用户将被重定向到另一个操作,该操作再次实现会话感知。
问题真的很奇怪。任何人都可以提出任何可能发生的原因。
此外,为了增加复杂性,相同的应用程序耳朵在本地也能正常工作。仅当我尝试将其部署到测试服务器时才会出现此问题。
这是拦截器代码。我不认为这是线程不安全的。
public class UserAuthentication extends AbstractInterceptor
{
public UserAuthentication()
{
}
public void init(){//System.out.println("init'd");
}
public void destroy() {System.out.println("destroyed");}
public String intercept(ActionInvocation invocation) throws Exception
{
String className = invocation.getAction().toString();
Map OHRMS = ActionContext.getContext().getSession();
System.out.println("EmpInfoUpd: " + new Date() + " Inside the interceptor: ");
System.out.println("EmpInfoUpd: " + new Date() + " Interceptor called for action: " + className);
System.out.println("EmpInfoUpd: " + new Date() + " Now printing the entries of session map from interceptor: " + OHRMS);
Employee temp = (Employee)OHRMS.get("emp");
if(temp==null)
{ System.out.println("EmpInfoUpd: " + new Date() + " The session had no \"emp\" object. Interceptor returned \"login\" ");
return "login";
}
System.out.println("EmpInfoUpd: " + new Date() + " The session had \"emp\" object with Employee name: " + temp.getFullName()+ " Interceptor returned \"login\" ");
return invocation.invoke();
}
}