2012-06-21 49 views
1

如果會話無效,我想重定向到主頁。 我爲spring-servlet.xml是Spring 3.0無法轉發來自HandlerInterceptorAdapter的請求

<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

這似乎是你的映射路徑中的問題。由於它與/**映射,您的loginForm.htm也被攔截。您有兩種解決方案可以解決此問題。

要麼定義<mvc:resources location="/resources/" mapping="/resources/**" />,以便* .htm請求不會被攔截。根據* .htm文件所在的路徑替換位置和映射值。

另一種選擇是改變你的映射在intercepter像/*.do或其他東西。

希望這可以幫助你。乾杯。

+0

thanx的回覆,但要求是,我hv攔截每個請求以檢查會話是否有效。如果沒有,則重定向到主頁面...所有url模式以.htm結尾 –

+0

這就是我試圖解釋,因爲所有的請求映射都以* .htm結尾,所以你正在陷入無限循環。從這種模式必須有一些exlusion其他明智的問題將繼續存在。 :-) –

+0

Thankx爲方向...通過將LoginForm.htm更改爲LoginForm.do並將攔截器映射從「/ **」更改爲「/*.htm」來解決問題。 –