Sas*_*mar 3 filter javabeans spring-boot
如何在春季启动FilterRegistrationBean中第二次注册相同类型的过滤器bean?
我有一种情况,我需要为不同的URL模式两次注册相同类型的过滤器bean。说IAMFilterBean类型的IAMFilterBean1是使用一个用于内部用户标识的身份验证密钥构建的。而IAMFilterBean2相同类型的IAMFilterBean与外部用户识别不同的身份验证密钥建立。现在,我需要使用弹簧启动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;
}
Run Code Online (Sandbox Code Playgroud)
但这对我不起作用!它不仅过滤已定义的请求,还过滤所有我的请求?您能帮我解决这个问题吗?
要注册两种类型的过滤器,您需要为其命名(或至少命名一种):
@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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1845 次 |
| 最近记录: |