SpringBoot フィルターの落とし穴、つまりフィルターの繰り返し実行の問題を思い出してください。

背景

Yipay (個人ビザなし決済プラットフォーム) に取り組んでいたとき、インターフェイス ログの印刷、クロスドメイン処理、ログイン認証などの機能を実行するためにフィルターを使用していましたが、最近ログ ファイルを確認したところ、突然、次のような情報が含まれていることに気づきましたログに出力されるのはペアでした ペアで、その時点で何かが間違っていることに気づきました インターフェイスが繰り返しリクエストしていましたか?

しかし、注意深く再現した結果、インターフェイスが繰り返しリクエストを行ったのではなく、フィルターが繰り返し実行され、結果としてログが繰り返し出力されることが判明しました。

トラブルシューティング

インターフェイスの問題ではないのに、なぜフィルターが 2 回実行されるのでしょうか?

問題のコードは次のとおりです。

SpringBoot スタートアップ クラス

@ServletComponentScan("com.walter.filter")
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

フィルター

@Component
@WebFilter
@Order(1)
public class ControllerFilter implements Filter {
	// 业务逻辑
}

@ServletCompnentScanスタートアップ クラスにアノテーションを追加したため、フィルターはこのアノテーションによってスキャンされるパッケージの下にあり、フィルターに 2 つのアノテーションを同時に追加したため @Component、  @WebFilterSpring コンテナーの起動時にフィルターが失敗することがわかりました 。 2回ロードされました。

解決

プラン1

フィルターの @Component注釈を削除する

シナリオ 2

@ServletComponentScanスタートアップクラスのアノテーションを削除する 

おすすめ

転載: blog.csdn.net/wuchenxiwalter/article/details/129133738