Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Register FilterRegistrationBean of same type twice

How to register a filter bean of same type on second time in spring boot FilterRegistrationBean?

I have a scenario, where I need to register a same type of filter bean twice for different url patterns. Say IAMFilterBean1 of type IAMFilterBean was built with one auth key for internal user identifications. And IAMFilterBean2 of same type IAMFilterBean was built with different auth key for external user identifications. Now I need to register both these IAMFilterBean1 and IAMFilterBean2 with spring boot FilterRegistrationBean for filtering different url patterns!

I tried like below,

@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;
}

But it doesn't work for me! it filters all my requests not only the defined ones? Can you please help me on resolving this.

like image 522
Sasikumar Avatar asked Jan 06 '23 12:01

Sasikumar


1 Answers

To register two filters of one type you will need to name them (or name at least one):

@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;
}
like image 195
Maciej Marczuk Avatar answered Jan 14 '23 05:01

Maciej Marczuk