两次注册相同类型的FilterRegistrationBean

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)

但这对我不起作用!它不仅过滤已定义的请求,还过滤所有我的请求?您能帮我解决这个问题吗?

Mac*_*zuk 8

要注册两种类型的过滤器,您需要为其命名(或至少命名一种):

@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)