Spring Bootインターセプターが有効にならない

予備現象

新建的Spring Boot拦截器不生效

予備調査

- 排查拦截器是否注册
- 拦截器的excludePathPatterns等属性是否设置正确
这些都没问题,进行下一步排查

さらなる調査

DispatchServeltをデバッグし、インターセプターがハンドラー内に存在するかどうかを確認し
ます。

2つのRequestMappingHandlerMappingインスタンスがある理由

  • RequestMappingHandlerMappingが初期化されるタイミング
    • WebMvcAutoConfigurationで初期化され、一度だけ初期化されます
  • RequestMappingHandlerMappingがインターセプターを追加するのはいつですか
    • RequestMappingHandlerMappingが初期化されると、現在の環境のすべてのインターセプターが取得され、独自の変数に書き込まれます

異常な方法で生成されたRequestMappingHandlerMappingがあることがわかります。スプリングブートを使用すると、アプリケーションは、アプリケーションの起動時にWebMvcAutoConfigurationを介してRequestMappingHandlerMappingインスタンスを生成します。

最後に、次のステートメントを含むxml構成ファイルがあることがわかりました。

<mvc:annotation-driven/>

mvc:annotation-drivenを使用した後、デフォルトはデフォルトの処理要求プロセッサーを登録するのに役立ちます。
問題はここで見つかりました

まとめ

スプリングブートフレームワークでは、アプリケーションが自動的にRequestMappingHandlerMappingインスタンスを生成し、このインスタンスが現在の環境のインターセプターをすべて取得して独自の変数に書き込み、mvc:アノテーション駆動型がデフォルトの処理リクエストハンドラーを登録します複数のRequestMappingHandlerMappingが発生し、競合が発生する

190件の元の記事を公開 19件の賞賛 200,000回以上の閲覧

おすすめ

転載: blog.csdn.net/zengchenacmer/article/details/104190494
おすすめ