filter - 注册相同类型的 FilterRegistrationBean 两次

标签 filter spring-boot javabeans

如何在 Spring Boot FilterRegistrationBean 中第二次注册相同类型的过滤器 bean?

我有一个场景,我需要为不同的 url 模式注册两次相同类型的过滤器 bean。假设 IAMFilterBean 类型的 IAMFilterBean1 是使用一个用于内部用户标识的身份验证 key 构建的。并且 IAMFilterBean2 的相同类型 IAMFilterBean 是使用不同的身份验证 key 构建的,用于外部用户标识。现在我需要使用 spring boot 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;
}

关于filter - 注册相同类型的 FilterRegistrationBean 两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39075654/

相关文章:

javascript - 使用ng-repeat时如何将数据分成两半?

java - 如何在HBase中的一行中的所有列中查找值

java - Spring Boot API 错误地重复 SQL 数据

json - 如何用postman和spring boot发送multipartFile和Json

spring - 无法将查询字符串参数映射到我的JavaBean(使用Spring 4和Datatables)

filter - 如何在 micronaut 中注册自定义过滤器?

spring-boot - 未调用 CommandLineRunner run() 方法

java - JTable中selectedElements的个数可以绑定(bind)吗?

jQuery 将参数传递给带有 contains 子句的过滤语句