2016-08-22 215 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

相关问题