2014-02-26 286 views
0

我寫了一個自定義攔截器PreventScreenInterceptor延伸HandlerInterceptorAdapterpreHandle無限循環

我檢查的一些情況,並此基礎上,我使用重定向

response.sendRedirect("/myapp/user/noaccess"); 

現在,無論何時我碰到/myapp/user/noaccess,它都會陷入無限循環,因爲我無法從這個區域出來ceptor。它一次又一次地被調用。

我的應用程序上下文有:

<mvc:interceptor> 
     <mvc:mapping path="/myapp/user/**"/> 
     <bean class="com.mypackage.interceptors.PreventScreenInterceptor" /> 
    </mvc:interceptor> 
+0

請添加一些內容。你的'HandlerInterceptor'是否攔截了對'/ myapp/user/noaccess'的請求?它會重新重定向到'/ myapp/user/noaccess'嗎? –

+0

是的,HandlerInterceptor正在攔截對該URL的請求。編輯的問題包含更多細節。讓我知道你是否需要更多信息。 –

回答

1

你必須使用request.getRequestURI()檢查所調用的URI不是「/ MyApp的/用戶/ noaccess下」,發送您重定向之前。

+0

它的工作原理。謝謝..但是有沒有其他乾淨的方法來達到相同的目的? –

1

您必須檢查請求是否與您從Interceptor重定向的操作一起進行,否則它會一次又一次地重新調用。

僅供參考使用此代碼 -

@Override 
    public boolean preHandle(HttpServletRequest request, 

    HttpServletResponse response, Object handler) throws Exception { 

     String uri = request.getRequestURI(); 
     logger.debug("inside interceptor and uri = "+uri); 

     if (!uri.endsWith("/noaccess")) { 
      logger.info("request is coming from other than /myapp/user/noaccess"); 
      response.sendRedirect("/myapp/user/noaccess"); 
     } 

     return true; 
    }