如何在春季啓動時第二次註冊同一類型的Filter bean FilterRegistrationBean?註冊FilterRegistrationBean兩次相同類型
我有一個場景,我需要爲不同的url模式註冊兩次相同類型的過濾器bean。說IAMFilterBean1類型IAMFilterBean是用一個用於內部用戶標識的授權密鑰構建的。和IAMFilterBean2相同類型IAMFilterBean是用不同的認證密鑰建立的外部用戶標識。現在我需要使用Spring引導FilterRegistrationBean註冊這兩個IAMFilterBean1和IAMFilterBean2,以過濾不同的url模式!
我試圖像下面,
@Bean
public Filter iamFilterBean1() {
return new IamFilterBean("auth_key_1");
}
@Bean
public Filter iamFilterBean2() {
return new IamFilterBean("auth_key_2");
}
@Bean
public FilterRegistrationBean filterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(iamFilterBean1());
registration.setName("iamFilterBean1");
List<String> urlPatterns = new ArrayList<>();
urlPatterns.add("/api/internal/auth");
registration.setUrlPatterns(urlPatterns);
return registration;
}
@Bean
public FilterRegistrationBean filterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(iamFilterBean2());
registration.setName("iamFilterBean2");
List<String> urlPatterns = new ArrayList<>();
urlPatterns.add("/api/external/auth");
registration.setUrlPatterns(urlPatterns);
return registration;
}
但它不爲我工作!它會過濾我所有的請求,而不僅僅是定義的請求?你能幫我解決這個問題嗎?
您發佈當你有2種豆命名將無法正常工作......代碼'filterRegistration一個人會凌駕另一個人。發佈實際的代碼,而不是代碼。除此之外,您可能希望從過濾器中刪除'@ Bean',因爲它將在上下文中註冊一個'Filter',這也會被檢測到,可能會導致註冊兩次。 –
感謝您的寶貴建議@ M.Deinum命名過濾器bean後,所有工作都按預期工作。 – Sasikumar