您正在向FilterRegistrationBean中注入新的BasicFilter().在这种情况下,您正在创建一个新对象,但它不是Spring托管的bean,因此其clientId将为空.所以基本上您现在有2个实例:
>由于@Component注释,由Spring创建的一个
>使用new关键字(不是由Spring管理)注入到FilterRegistrationBean中的一个
您可能应该将registerFilter()方法移动到单独的配置类(用@Configuration注释),然后将BasicFilter bean自动装配/注入到该方法中,例如:
@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean registerFilter(BasicFilter filter) { // Inject it
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(filter); // Use it
registration.addUrlPatterns("/secure/*");
return registration;
}
}
可选地,如果您想将@Bean方法保留在过滤器本身中,则应将其替换为该方法,因为当前对象是由Spring管理的,而新实例则不会:
@Bean
public FilterRegistrationBean registerFilter() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(this);
registration.addUrlPatterns("/secure/*");
return registration;
}