首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SpringMVC会话超时-重定向到特殊的JSP

SpringMVC会话超时-重定向到特殊的JSP
EN

Stack Overflow用户
提问于 2016-02-24 18:47:59
回答 1查看 2.6K关注 0票数 2

我到处找过,但没有找到一个简单的解决办法。

我们有一个特殊的JSP,timeout.jsp,每当SpringMVC模块拦截无效的会话操作时,都需要显示它。超时已在web.xml中配置并正常工作。

在Struts之前,它是一个定义转发和拦截dispatchMethod的问题,

代码语言:javascript
运行
复制
<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:

代码语言:javascript
运行
复制
<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>*.mvc</url-pattern>
</servlet-mapping>

任何发送带有此模式的URL的内容都应该对会话有效性进行交叉检查,如果无效,则重定向到timeout.jsp

注意,这里给出的解决方案(https://stackoverflow.com/a/5642344/1005607)使没有使用

代码语言:javascript
运行
复制
<web-app>
    <error-page>
        <exception-type>org.springframework.web.HttpSessionRequiredException</exception-type>
        <location>/index.jsp</location>
    </error-page>
</web-app>

当我试图访问会话时,我的SpringMVC表单代码中甚至在任何类型的SessionRequiredException之前都有一个SessionRequiredException。我需要在全球范围内防范这些NullPointerExceptions。

EN

回答 1

Stack Overflow用户

发布于 2016-02-26 16:00:30

我的最后解决方案:老式过滤器。它为我工作,没有其他简单的解决方案可用。

web.xml

代码语言:javascript
运行
复制
<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

代码语言:javascript
运行
复制
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

    }

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35610509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档