我到处找过,但没有找到一个简单的解决办法。
我们有一个特殊的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>任何发送带有此模式的URL的内容都应该对会话有效性进行交叉检查,如果无效,则重定向到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>当我试图访问会话时,我的SpringMVC表单代码中甚至在任何类型的SessionRequiredException之前都有一个SessionRequiredException。我需要在全球范围内防范这些NullPointerExceptions。
发布于 2016-02-26 16:00:30
我的最后解决方案:老式过滤器。它为我工作,没有其他简单的解决方案可用。
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
}
}https://stackoverflow.com/questions/35610509
复制相似问题