7

HandlerInterceptors のドキュメントに従いました。Spring の新しいバージョンでは、「構成されたインターセプターは、アノテーション付きコントローラー メソッドで処理されるすべてのリクエストに適用される」ことに注意してください。

以下は、xml 構成ファイルにあります。 ここに画像の説明を入力

次のように始まる注釈付きコントローラーがあります。

ここに画像の説明を入力

コントローラーのコードを実行する URL を要求すると、インターセプター コードが呼び出されません。誰でも理由を説明できますか?

インターセプターのコードは次のとおりです。

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

public class DomainNameInterceptor extends HandlerInterceptorAdapter {
    public boolean preHandle(HttpServletRequest request,
                           HttpServletResponse response, Object handler) 
         throws Exception {
    System.out.println("Why is this not called?");
    return true;
  }
}

次のドキュメントを使用していました: Spring Core 3.1.x ドキュメント

HandlerInterceptor を検索し、含まれているリンクのドキュメント内にある例に従いました。

4

2 に答える 2

10

を使用して MVC コンテキストを構成し<mvc:annotation-driven/>た場合、このカスタム名前空間に基づいて Bean を定義するときに作成された handlerMapping が、定義した handlerMapping をオーバーライドしていると思います。インターセプターを登録するより良い方法は、サブタグを使用し<mvc:interceptors>てインターセプターを定義することです。これにより、正しい handlerMapping に登録されます。

<mvc:annotation-driven>
    <mvc:interceptors>
        <ref bean="interceptor"/>
    </mvc:interceptors>
</mvc:annotation-driven>
于 2012-05-25T01:17:01.643 に答える
9

上記のBijuの答えは正しいですが、Spring 3.1ではこれを行う必要があります:

<mvc:interceptors>
   <mvc:interceptor>
     <mvc:mapping path="/pathToIntercept/**" />
     <bean class="com.foo.bar.Interceptor" />
   </mvc:interceptor>
</mvc:interceptors>
于 2012-11-11T06:51:22.303 に答える