Spring HttpSecurity - 过滤依赖注入

时间:2016-01-27 10:38:16

标签: java spring spring-security dependency-injection

在我的网络应用程序中,我创建了一个自定义过滤器,用于将当前登录详细信息添加到org.slf4j.MDC。该应用程序使用弹簧启动,弹簧安全性完全使用注释配置。

以下是弹簧配置的相关部分,

@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()

0 个答案:

没有答案