首頁 > Java > java教程 > 為什麼我的 Spring Filter 被呼叫兩次,我該如何修復它?

為什麼我的 Spring Filter 被呼叫兩次,我該如何修復它?

Mary-Kate Olsen
發布: 2024-12-09 03:00:15
原創
962 人瀏覽過

Why is My Spring Filter Being Invoked Twice, and How Can I Fix It?

使用Spring Bean 註解註冊兩次過濾器

將過濾器註冊為Spring bean 時,重要的是要考慮多次調用的可能性。在某些情況下,過濾器可能會被觸發兩次,如以下問題所示:

問題:

用戶定義了一個過濾器A,它擴充了Spring 的GenericFilterBean 。當此過濾器在Spring Security 配置中註冊為bean 時,會觀察到額外的調用,從而產生以下輸出:

filter A before
filter A before
mycontroller invoke
filter A after
filter A after
登入後複製

查詢:

Why過濾器是否被呼叫兩次,這個問題如何解決解決了嗎?

答案:

額外呼叫是因為 Spring Boot 自動向 servlet 容器註冊任何 Filter 類型的 bean。為了防止這種情況,有兩個選項:

選項1:僅向Spring Security 註冊過濾器

避免將過濾器公開為bean 並僅向Spring Security 註冊它,如下:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    http.addFilterBefore(new A(), BasicAuthenticationFilter.class);
    http.csrf().disable();
}
登入後複製

選項2:使用FilterRegistrationBean與註解

如果需要將依賴項自動組裝到過濾器中,可以將其註冊為 Bean,但使用 FilterRegistrationBean 停用其向 servlet 容器的自動註冊:

@Bean
public FilterRegistrationBean registration(MyFilter filter) {
    FilterRegistrationBean<MyFilter> registration = new FilterRegistrationBean<MyFilter>(filter);
    registration.setEnabled(false);
    return registration;
}
登入後複製

以上是為什麼我的 Spring Filter 被呼叫兩次,我該如何修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板