Spring 3.0无法转发HandlerInterceptorAdapter的请求

时间:2012-06-21 06:25:40

标签: spring interceptor spring-3

如果会话无效,我想重定向到主页。 我的spring-servlet.xml是

<mvc:interceptors>
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
    <mvc:interceptor>
        <mvc:mapping path="/**" />
        <bean class="com.xxx.MyInterceptor" />
    </mvc:interceptor>
</mvc:interceptors>

拦截器:

public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception {
        if ((null == request.getSession(false))
                || (null == request.getSession(false).getAttribute(
                        "user"))) {
            System.out.println("user logged out...");
            RequestDispatcher rd = request.getRequestDispatcher("loginForm.htm");
            rd.forward(request, response);
            return false;
        }
        return super.preHandle(request, response, handler);
    }

但它不起作用...... 每当应用程序开始时,消息会被多次打印,最后它会导致堆栈溢出..

谢谢。

1 个答案:

答案 0 :(得分:1)

似乎问题出现在您的映射路径中。由于它与/**映射,因此您的loginForm.htm也会被截获。您有两种解决方案可以解决此问题。

定义<mvc:resources location="/resources/" mapping="/resources/**" />以便不会拦截* .htm请求。根据* .htm文件所在的路径替换位置和映射值。

另一种选择是使用类似/*.do或其他内容的方式更改截距中的映射。

希望这会对你有所帮助。欢呼声。