如何在Struts2中设置会话超时?

How to set session timeout in Struts2?

提问人:Raja Vallapan 提问时间:6/29/2023 最后编辑:Roman CRaja Vallapan 更新时间:6/30/2023 访问量:50

问:

如何在 Struts 2 中设置会话超时:

import java.util.Map;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class SessionInterceptor extends AbstractInterceptor {
    private static final long serialVersionUID = 1L;

    @Override
      public String intercept(ActionInvocation invocation) throws Exception {
          Map<String,Object> session = invocation.getInvocationContext().getSession();
          if(session.isEmpty())
              return "session";
          return invocation.invoke();
      }
}

它不起作用。

cookie 会话 变量 struts

评论

1赞 Dave Newton 6/29/2023
在 web.xml 中(可能是首选)或像大多数其他 Java Web 框架一样使用 HttpSession#setMaxInactiveInterval?我不确定你说的“它不起作用”是什么意思,因为这里没有检查会话有效性的代码。

答:

0赞 Roman C 6/30/2023 #1

您可以在拦截器中使用的此代码:

HttpServletSession httpsession = invocation.getInvocationContext().getServletRequest().getSession();
httpsession.setMaxInactiveInterval(timeout);

您可以阅读有关将超时设置为 http 会话的更多信息:

使用 web.xmlsetMaxInactiveInterval 设置会话超时的区别

第一种方法是在所有会话的配置中使用静态常量。第二种方法是动态的,您可以在运行时使用 servlet API 动态设置值,并且仅影响调用该方法的会话。设置该值后,无论使用哪种方法,容器都会使会话失效。看看文档是怎么说的:HttpSession#setMaxInactiveInterval(int)

指定在 servlet 容器使此会话失效之前,客户机请求之间的时间(以秒为单位)。

间隔值为零或更小表示会话不应超时。

部署描述符中的值以“分钟”为单位,但该方法接受以“秒”为单位的值。web.xmlsetMaxInactiveInterval()

评论

0赞 Roman C 9/6/2023
如果这个答案对你有帮助,那么你应该把它标记为接受。我在答案左边的复选框。此外,值得投票支持帮助您的答案,以帮助其他人选择正确的答案。