Java Spring HttpSecurity-过滤器依赖项注入

Java Spring HttpSecurity-过滤器依赖项注入,java,spring,spring-security,dependency-injection,Java,Spring,Spring Security,Dependency Injection,在我的web应用程序中,我创建了一个自定义过滤器,用于将当前登录详细信息添加到org.slf4j.MDC。应用程序使用spring引导,spring安全性完全使用注释进行配置 这是弹簧配置的相关部分 @Configuration @EnableWebSecurity public class SecurityConfiguration extends WebSecurityConfigurerAdapter{ @Inject private CustomFilter custom

在我的web应用程序中,我创建了一个自定义过滤器,用于将当前登录详细信息添加到
org.slf4j.MDC
。应用程序使用spring引导,spring安全性完全使用注释进行配置

这是弹簧配置的相关部分

@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter{
    @Inject
    private CustomFilter customFilter;
    //
    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http.addFilter(customFilter);
    }
}
上面的代码不起作用。我有个例外

Caused by: java.lang.IllegalArgumentException: Can not set com.example.web.filter.CustomFilter field com.example.config.SecurityConfiguration.customFilter to com.sun.proxy.$Proxy202
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:164) [rt.jar:1.7.0_25]
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:168) [rt.jar:1.7.0_25]
    at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:81) [rt.jar:1.7.0_25]
    at java.lang.reflect.Field.set(Field.java:741) [rt.jar:1.7.0_25]
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:505) [spring-beans-4.0.7.RELEASE.jar:4.0.7.RELEASE]
    ... 76 more
但这一条确实有效

@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter{
    //
    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http.addFilter(new CustomFilter());
    }
}
据我所知,建议让spring容器管理初始化,这就是我尝试第一种方法的原因。有人能告诉我为什么
addFilter()
方法的依赖项注入失败吗


PS:我也尝试了
addFilterAfter
方法,但得到了相同的结果。当我的CustomFilter扩展了SecurityContextHolderAwareRequestFilter时,我只使用了
addFilter()

您可以在Spring中使用此注释,但它也有自己的DI注释。此注释使用的bean应该由Spring@RomanC是使用
@Autowired
而不是
@Inject
按预期工作。但是为什么?什么是
@Inject
?从哪个包裹寄来的?