【问题标题】:Struts 2 Session TimeOutStruts 2 会话超时
【发布时间】:2012-02-13 13:53:09
【问题描述】:

我是新来的struts。我正在使用 Struts2。请任何人告诉我如何在会话超时后自动重定向jsp页面。

【问题讨论】:

    标签: java struts2


    【解决方案1】:

    好吧,您需要创建一种方法来检查会话是否已过期,因为浏览器无法确定会话是否已过期。 您需要有以下步骤

    在您的 web.xml 中定义会话超时。

    <session-config>  
            <session-timeout>  
                30  
            </session-timeout>  
        </session-config>
    

    绕过 Struts2 的一种简单方法是创建一个 Interceptor 并检查会话有效性,如果会话已过期,您可以将用户重定向回您指定的 jsp 页面。这里是示例拦截器的快速视图

    拦截器

    public class SessionInterceptor extends AbstractInterceptor {
      @Override
      public String intercept(ActionInvocation invocation) throws Exception {
          Map<String,Object> session = invocation.getInvocationContext().getSession();
          if(session.isEmpty())
              return "session"; // session is empty/expired
          return invocation.invoke();
      }
    

    最后你需要通过在struts.xml文件中声明来告诉Stuts2你想使用这个拦截器

    struts.xml

    <interceptor name="session" class="myapp.interceptor.SessionInterceptor" />
    <interceptor-stack name="sessionExpirayStack">
        <interceptor-ref name="defaultStack"/>
        <interceptor-ref name="session"/>
       </interceptor-stack>
    

    现在您只需在操作中使用此堆栈声明

    动作配置

    <action name="myAction" class="myClass">
        <interceptor-ref name="sessionExpirayStack" />
        <result name="success">success.jsp</result>
        <result name="session">sessionexpired.jsp</result>
      </action>
    

    您可以为*session* 声明一个全局结果,以便将使用全局重定向到同一页面。

    对于 Struts2 之外的方式,您可以选择创建一个 Servlet filter 并且可以将会话检查代码放置在过滤器内。您需要实现 javax.servlet.Filter 接口

    会话检查过滤器

    public final CheckSession impliments Filter{
        private FilterConfig filterConfig = null;
        public void init(FilterConfig filterConfig) throws ServletException {
            this.filterConfig = filterConfig;
        }
        public void destroy() {
            this.filterConfig = null;
        }
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain  
                chain) {
    
            // Put your logic here to check session
        }
    }
    

    对于自动重定向,您必须通过某种 Ajax 调用继续检查会话

    【讨论】:

      【解决方案2】:

      自动 重定向,您需要发出 Ajax 请求以查看会话是否仍包含已知值。如果会话超时,它会被容器失效,类似currentUser 的对象将不再在会话中。

      如果该对象不再存在,您的 Ajax 调用将返回标志、重定向 URL 等,并且 Ajax success 方法将检查您是否需要重定向它们,并将窗口位置设置为一个常量,或者指向 Ajax 调用返回的重定向 URL 值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-05
        • 2012-06-21
        • 2014-01-23
        • 2013-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-05
        相关资源
        最近更新 更多