我到处寻找,但没有找到一个简单的解决方案。
我们有一个特殊的JSP, timeout.jsp ,只要SpringMVC模块拦截无效的会话操作,就需要显示它。超时已在web.xml中配置并且可以正常工作。
以前在Struts中,这是一个定义前进和拦截dispatchMethod的问题,
<forward name="sessionTimeout" path="/WEB-INF/timeout.jsp" redirect="false" />
@Override
protected ActionForward dispatchMethod(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response, final String name)
throws Exception {
//...
if (!isSessionValid())
return mapping.findForward("sessionTimeout");
}
但是如何在SpringMVC模块中实现全能解决方案呢?
我的所有SpringMVC URL都来自这个servlet映射,* .mvc:
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>*.mvc</url-pattern>
</servlet-mapping>
任何发送带有此模式的网址的内容都应该交叉检查会话有效性,如果无效,则重定向到 timeout.jsp 。
请注意 此处给出的解决方案(https://stackoverflow.com/a/5642344/1005607) 不 工作:
<web-app>
<error-page>
<exception-type>org.springframework.web.HttpSessionRequiredException</exception-type>
<location>/index.jsp</location>
</error-page>
</web-app>
在我尝试访问会话时,即使在任何类型的SessionRequiredException之前,我的SpringMVC表单代码中也存在NullPointerException。我需要全局防范这些NullPointerExceptions。
答案 0 :(得分:1)
我的最终解决方案:老式过滤器。它适用于我,没有其他简单的解决方案。
<强>的web.xml 强>
<filter>
<filter-name>spring_mvc_controller_filter</filter-name>
<filter-class>myapp.mypackage.SpringMVCControllerFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>spring_mvc_controller_filter</filter-name>
<url-pattern>*.mvc</url-pattern>
</filter-mapping>
<强> SpringMVCControllerFilter 强>
public class SpringMVCControllerFilter implements Filter
{
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpSession session = request.getSession(false);
if (session.isValid() && !session.isNew())
{
chain.doFilter(request, response);
}
else
{
request.getRequestDispatcher("/WEB-INF/jsp/sessionTimeout.jsp").forward(request, response);
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}