Java Spring HttpSecurity-过滤器依赖项注入
在我的web应用程序中,我创建了一个自定义过滤器,用于将当前登录详细信息添加到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
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
?从哪个包裹寄来的?