2016-09-13 13 views
0

ハンドラインターセプタを設定した簡単なWebMVCアプリケーションを作成しました。インターセプタの責任は簡単です。つまり、有効なセッションがHttpRequestに存在するかどうかを確認し、そうであれば登録ページにリダイレクトします。Spring MVC HandlerInterceptor:Redirect Failed

ページが正しく

Firefoxはサーバが この要求をリダイレクトしていることを検出したリダイレクトされていません。ブラウザがメッセージを投げている -

私が遭遇した問題は、リダイレクトにということです決して完了しない方法でアドレスしてください。次のように

インターセプタコードがある:私はリダイレクトへの完全な要求コンテキストパス追加しようと試みてきた

public class LoginInterceptor extends HandlerInterceptorAdapter{ 



// to be used checking session management for user. 
@Override 
public boolean preHandle(HttpServletRequest request, 
         HttpServletResponse response, 
         Object handler) throws Exception { 


    System.out.println(" <interceptor> - this is pre handle"); 

    return true; 
} 


@Override 
public void postHandle(HttpServletRequest request, 
         HttpServletResponse response, Object handler, 
         ModelAndView modelAndView) throws Exception { 

    System.out.println(" <interceptor> - this is post handle"); 

    HttpSession session = request.getSession(); 
    User user = (User) session.getAttribute("user"); 


    System.out.println(" <interceptor> - session id is --> " + session.getId()); 
    System.out.println(" <interceptor> - session create time is --> " + session.getCreationTime()); 
    System.out.println(" <interceptor> - session last accessed time is --> " + session.getLastAccessedTime()); 

    try { 
     System.out.println(" <interceptor> - user info is --> " + user.toString()); 
    }catch(Exception e){ 
     e.toString(); 
    } 

    try{ 
     if(session != null){ 
      response.sendRedirect("register"); 
      return; 
     } 
    }catch(Exception e){ 
     e.toString(); 
    } 

} 


public void afterCompletetion(){ 
    System.out.println(" <interceptor> - this is after completion"); 

} 

} - ならびにルート・コンテキスト - 失敗どちらもを。私はどこでこれに失敗しているのかわかりません。だから、どんな助けも大歓迎です。

+0

C&Pの問題ではないのかどうかはわかりませんが、最後の方法をチェックしてください...間違っていますか?public void afterCompletetion(){public void afterCompletion(){と@上書きすると、自分で問題が見つかりました... – Paolof76

+0

'response.sendRedirect(request.getContextPath()+"/register ");' –

答えて

3

あなたが書いたインターセプタは、どのようなものであれ、すべての要求に対応します。

だから、/registerその時にリダイレクトされますときにも、それはインターセプタを達することがsessionがnullでないことを見つけて、もう一度同じことをredirect..andますが...同じ要求に無限リダイレクトを続けています。

@Override 
public void postHandle(HttpServletRequest request, 
         HttpServletResponse response, Object handler, 
         ModelAndView modelAndView) throws Exception { 
    HttpSession session = request.getSession(); 
    try{ 
     if(session != null){       //Infinite 
      response.sendRedirect("register"); 
      return; 
     } 
    }catch(Exception e){ 
     e.toString(); 
    } 

} 

だから、それが唯一の特定の要求のためにチェックして、無限ループに落ちた文句を言わないregister.Itにリダイレクトされます、それはconfigurationまたはcode

if((request.getRequestURI().equals(contextPath+"/someURI") && session != null){ 
    response.sendRedirect("register"); 
} 

で一つだけの要求をインターセプトしていることを確認してください。

0

インターセプタの設定を確認して、特定のURLパターンのみを受け入れるかどうか確認してください。

次の例を参照してください。

<!-- Configures Interceptors --> 
<mvc:interceptors> 
    <!-- This XML will intercept all URIs --> 
    <bean class="com.howtodoinjava.interceptor.DemoInterceptor"></bean> 

    <!-- This XML will apply interceptor to only certain URIs --> 
    <!-- 
    <mvc:interceptor> 
      <mvc:mapping path="/users"></mvc:mapping> 
      <bean class="com.howtodoinjava.interceptor.DemoInterceptor"></bean> 
    <mvc:interceptor> 
     --> 
</mvc:interceptors>