予備現象
新建的Spring Boot拦截器不生效
予備調査
- 排查拦截器是否注册
- 拦截器的excludePathPatterns等属性是否设置正确
这些都没问题,进行下一步排查
さらなる調査
DispatchServeltをデバッグし、インターセプターがハンドラー内に存在するかどうかを確認し
ます。
2つのRequestMappingHandlerMappingインスタンスがある理由
- RequestMappingHandlerMappingが初期化されるタイミング
- WebMvcAutoConfigurationで初期化され、一度だけ初期化されます
- RequestMappingHandlerMappingがインターセプターを追加するのはいつですか
- RequestMappingHandlerMappingが初期化されると、現在の環境のすべてのインターセプターが取得され、独自の変数に書き込まれます
異常な方法で生成されたRequestMappingHandlerMappingがあることがわかります。スプリングブートを使用すると、アプリケーションは、アプリケーションの起動時にWebMvcAutoConfigurationを介してRequestMappingHandlerMappingインスタンスを生成します。
最後に、次のステートメントを含むxml構成ファイルがあることがわかりました。
<mvc:annotation-driven/>
mvc:annotation-drivenを使用した後、デフォルトはデフォルトの処理要求プロセッサーを登録するのに役立ちます。
問題はここで見つかりました
まとめ
スプリングブートフレームワークでは、アプリケーションが自動的にRequestMappingHandlerMappingインスタンスを生成し、このインスタンスが現在の環境のインターセプターをすべて取得して独自の変数に書き込み、mvc:アノテーション駆動型がデフォルトの処理リクエストハンドラーを登録します複数のRequestMappingHandlerMappingが発生し、競合が発生する