如何在春季启动时第二次注册同一类型的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