2016-08-22 218 views
2

如何在春季啓動時第二次註冊同一類型的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; 
} 

但它不爲我工作!它會過濾我所有的請求,而不僅僅是定義的請求?你能幫我解決這個問題嗎?

+0

您發佈當你有2種豆命名將無法正常工作......代碼'filterRegistration一個人會凌駕另一個人。發佈實際的代碼,而不是代碼。除此之外,您可能希望從過濾器中刪除'@ Bean',因爲它將在上下文中註冊一個'Filter',這也會被檢測到,可能會導致註冊兩次。 –

+0

感謝您的寶貴建議@ M.Deinum命名過濾器bean後,所有工作都按預期工作。 – Sasikumar

回答

3

要註冊一個類型的兩個過濾器,你需要他們的名字(或名稱至少一個):

@Bean(name="filterRegistrationBean2") 
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; 
} 
+0

不知何故Bean註釋中的名稱屬性不適用於我。但我已經將bean本身重命名爲「filterRegistrationBean1」及其作品!謝謝。 – Sasikumar

相關問題