1

如果会话无效,我想重定向到主页。我的 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);
    }

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

谢谢你。

4

1 回答 1

1

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

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

另一种选择是用类似的东西或其他东西来改变你在拦截器中的映射/*.do

希望这对您有所帮助。干杯。

于 2012-06-21T06:55:40.667 回答