用户会话在tomcat上变得混乱

用户会话在tomcat上变得混乱,第1张

用户会话在tomcat上变得混乱

两天前,我在一个旧项目(不是我的)上调试了类似的东西。

原来这是自定义拦截器的错误。

检查我可以在您的堆栈中看到的自定义拦截器,

        <interceptor-ref name="sessionLoggin"/>        <interceptor-ref name="appAccess"/>

并确保其代码是线程安全的(避免使用拦截器上的字段,而不是同步所有内容,仅使用局部变量)。

例如,考虑以下代码:

public abstract class ThreadUnsafeInterceptor extends AbstractInterceptor {    private Map<String, Object> session; // <!-- Thread Unsafe    public final String intercept(ActionInvocation invocation) throws Exception {        session = invocation.getInvocationContext().getSession();            System.out.println(session.get("myObject"));        return invocation.invoke();    }}

这样,当User1进入方法时,它会设置共享

session
对象及其会话。如果在User1尚未完成的情况下User2进入该方法,则User2将立即
session
用其会话覆盖该对象,而User1将引用User2会话而不是它自己的会话。

要使其线程安全,应如下所示:

public abstract class ThreadSafeInterceptor extends AbstractInterceptor {    public final String intercept(ActionInvocation invocation) throws Exception {        Map<String, Object> session; // <!-- Thread Safe        session = invocation.getInvocationContext().getSession();                System.out.println(session.get("myObject"));        return invocation.invoke();    }}

编辑:

您的拦截器存在一些问题:

1)请求不能被访问这种方式(如描述这里):

HttpServletRequest request = ServletActionContext.getRequest();

从Struts2拦截器内部访问请求的正确方法是:

// Constants are from StrutsStatics interfaceHttpServletRequest request = (HttpServletRequest) context.get(HTTP_REQUEST);

2)如果您不想

invocation.invoke();
立即返回立即数,请注意,将其分配给
result
String将触发“流”,并且
invoke()
将在Action执行之后执行后面的行,如下所述:

public String intercept(ActionInvocation invocation) throws Exception {    String className = invocation.getAction().getClass().getName();    long startTime = System.currentTimeMillis();    System.out.println("Before calling action: " + className);    String result = invocation.invoke();    long endTime = System.currentTimeMillis();    System.out.println("After calling action: " + className + " Time taken: " + (endTime - startTime) + " ms");    return result;}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5488288.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存