当我第一次启动应用程序时,会调用 sessionExpired 页面。谁能告诉我如何防止这种情况发生?一旦进入应用程序,它就会像预期的那样在 session 超时后过期。我正在使用tiles.xml。
tiles.xml
<!--Session Expired Page -->
<definition name="sessionExpired" extends="login.definition">
<put-attribute name="information" value="" />
<put-attribute name="body" value="/WEB-INF/jsp/sessionExpired.jsp" />
</definition>
<!--End of Session Expired Page -->
web.xml
<session-config>
<session-timeout>1</session-timeout>
</session-config>
<filter>
<filter-name>SessionFilter</filter-name>
<filter-class>com.Filter.SessionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SessionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
session 过滤器
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
HttpSession session = request.getSession(false);
if (session != null) {
long currentTime = System.currentTimeMillis() / 1000;
long lastSessionAccessedTime = session.getLastAccessedTime() / 1000;
int inactiveInterval = (int) currentTime -lastSessionAccessedTime);
if (inactiveInterval > session.getMaxInactiveInterval()) {
RequestDispatcher rd = request.getRequestDispatcher("/sessionExpired");
rd.forward(request, response);
} else {
chain.doFilter(request, response);
}
} else {
RequestDispatcher rd = request.getRequestDispatcher("/sessionExpired");
rd.forward(request, response);
}
}
最佳答案
场景是相同的 - 在启动或新 session 时 - session == null
启动时,所有先前的 session 都会失效,因此您将被发送到 sessionExpired,与新 session 相同
这取决于要求 - 但您可能想查看 tomcat 上的持久 session
关于Java session 超时 - 当我第一次启动应用程序时,会显示 session 过期消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38992889/