两次注册相同类型的 FilterRegistrationBean
Register FilterRegistrationBean of same type twice
如何在spring boot FilterRegistrationBean中第二次注册同类型的filter bean?
我有一个场景,我需要为不同的 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;
}
但这对我不起作用!它过滤我所有的请求,而不仅仅是定义的请求?你能帮我解决这个问题吗?
要注册一种类型的两个过滤器,您需要为它们命名(或至少命名一个):
@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;
}
如何在spring boot FilterRegistrationBean中第二次注册同类型的filter bean?
我有一个场景,我需要为不同的 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;
}
但这对我不起作用!它过滤我所有的请求,而不仅仅是定义的请求?你能帮我解决这个问题吗?
要注册一种类型的两个过滤器,您需要为它们命名(或至少命名一个):
@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;
}