Struts 2 Session TimeOut

ven*_*kat 6 java struts2

我是struts的新手.我正在使用Struts2.请任何人告诉我如何在Session有超时后自动重定向jsp页面.

Ume*_*thi 20

那么您需要创建一种方法来检查会话是否已过期,因为浏览器无法确定会话是否已过期.您需要执行以下步骤

在web.xml中定义会话超时.

<session-config>  
        <session-timeout>  
            30  
        </session-timeout>  
    </session-config>
Run Code Online (Sandbox Code Playgroud)

Struts2的一个简单方法是创建一个Interceptor并检查Session的有效性,如果session已经过期,你可以将用户重定向回你指定的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();
  }
Run Code Online (Sandbox Code Playgroud)

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

在struts.xml

<interceptor name="session" class="myapp.interceptor.SessionInterceptor" />
<interceptor-stack name="sessionExpirayStack">
    <interceptor-ref name="defaultStack"/>
    <interceptor-ref name="session"/>
   </interceptor-stack>
Run Code Online (Sandbox Code Playgroud)

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

动作配置

<action name="myAction" class="myClass">
    <interceptor-ref name="sessionExpirayStack" />
    <result name="success">success.jsp</result>
    <result name="session">sessionexpired.jsp</result>
  </action>
Run Code Online (Sandbox Code Playgroud)

替代方案是,您可以声明全局结果,*session*以便将使用重定向到全局的同一页面.

对于Struts2之外的方式,你可以选择创建一个Servlet过滤器,并可以在过滤器中放置会话检查代码.你需要实现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
    }
}
Run Code Online (Sandbox Code Playgroud)

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