Spring 3.0 не может переслать запрос от HandlerInterceptorAdapter

Я хочу перенаправить на домашнюю страницу, если сеанс станет недействительным. Мой 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);
    }

Но это не работает ... Всякий раз, когда приложение запускается, сообщение печатается несколько раз, и в конце оно дает переполнение стека.

Спасибо.


person Naresh J    schedule 21.06.2012    source источник


Ответы (1)


Похоже, проблема в вашем пути сопоставления. Поскольку он сопоставлен с /**, ваш loginForm.htm также перехватывается. У вас есть два решения для решения этой проблемы.

Либо определите <mvc:resources location="/resources/" mapping="/resources/**" />, чтобы запросы *.htm не перехватывались. Замените значения местоположения и сопоставления в соответствии с вашим путем, где находятся файлы *.htm.

И еще один вариант — изменить отображение в перехватчике на что-то вроде /*.do или что-то еще.

Надеюсь, это поможет вам. Ваше здоровье.

person Japan Trivedi    schedule 21.06.2012
comment
спасибо за ответ, но требование состоит в том, чтобы перехватывать каждый запрос на проверку того, действителен ли сеанс или нет ... если нет, то перенаправить на главную страницу ... весь шаблон URL заканчивается на .htm - person Naresh J; 21.06.2012
comment
Это то, что я пытался объяснить, поскольку все ваши сопоставления запросов заканчиваются на *.htm, вы попадаете в бесконечный цикл. Должно быть какое-то исключение из этого шаблона, иначе ваша проблема сохранится. :-) - person Japan Trivedi; 21.06.2012
comment
Спасибо за направление... Проблема решена путем изменения LoginForm.htm на LoginForm.do и отображения перехватчика с /** на /*.htm.. - person Naresh J; 21.06.2012