繁体   English   中英

会话超时不适用于Struts中的某些链接

[英]session-timeout not working for some links in Struts

我的应用程序使用Struts 1,并且在web.xml中将60配置为会话超时。 我正在使用框架,菜单树(链接)的视图左侧一直保持不变,而右侧显示单击时的相应页面。 超时后,大多数链接都显示登录页面。 但是很少有,它们仍然处于同一流程中。 请在下面找到未超时的链接的配置和jsp代码段。

web.xml

<session-config>
  <session-timeout>60</session-timeout>
</session-config>
<login-config>
  <auth-method>FORM</auth-method>
  <realm-name>default</realm-name>
  <form-login-config>
    <form-login-page>/login.jsp</form-login-page>
    <form-error-page>/do/login</form-error-page>
  </form-login-config>
</login-config>

什么不起作用

struts-config.xml

<action path="/Report" scope="request" name="form.Report" type="com.mypack.ReportAction" input="/Data.jsp">
  <forward name="show" path="/Data.jsp" />
</action>

menu.jsp

<tr>
  <td height="24"><b><font size="2">
      <html:link forward="/Report" target="main">Reports</html:link></font></b>
  </td>
</tr>

会话timout与strut不相关,但与您的Web应用程序容器相关。 为确保会话终止时每个链接都重定向到登录页面,您可以在web.xml中添加一个过滤器,该过滤器将检查请求,如果达到timout,则将其重定向到登录页面,否则将其重定向到登录页面。继续。

您可以添加过滤器,如下所示:

在您的web.xml中添加以下行

<filter>
    <filter-name>SessionFilter</filter-name>
    <filter-class>
        com.rbz.SessionFilter
    </filter-class>    
</filter>
<filter-mapping>
    <filter-name>SessionFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

然后在您的资源中,在下面添加类

package com.rbz;

import java.io.IOException;
import java.util.ArrayList;
import java.util.StringTokenizer;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class SessionFilter implements Filter {


    public void destroy() {
    }

    public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain chain) throws IOException, ServletException {

        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;    

    // try to get session
    HttpSession session = request.getSession(false);

    String url = request.getServletPath();

    if ((null != session && !session.isNew()) || (null == session && url.contains("login.jsp")) {     
      chain.doFilter(req, res);          
    } else {          
      response.sendRedirect("login.jsp");
    }   


    }

    public void init(FilterConfig config) throws ServletException {
    }
}

此代码未经测试!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM