[英]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.