Spring Security Authentication Manager自动装配

时间:2013-01-25 23:43:23

标签: spring security authentication autowired

在几个绝望的时间试图找出我的自定义身份验证管理器自动装配的原因后,我来到这里寻求一些帮助。 所以我有一个Web应用程序,在Spring上运行(使用Stripes)。身份验证由我的自定义类完成。一切正常 - 在jsp中,我可以使用jsp标签和每一个,http拦截器可以正常工作。但是,当我尝试将身份验证管理器自动装入Jersey“REST类”时,一切都会出错并且没有注入任何内容。

所以,在web xml中我有两个上下文文件:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/spring-context.xml
        /WEB-INF/spring-security.xml
    </param-value>
</context-param>

弹簧security.xml文件:

<context:component-scan base-package="org.springframework.security" />
<context:annotation-config/>

<http use-expressions="true" auto-config="true">

</http>

<authentication-manager alias="authManager">
    <authentication-provider ref="AuthenticationManagerBean" />
</authentication-manager> 

<beans:bean id="AuthenticationManagerBean" class="com.manager.services.MyAuthenticationManager"/>
<beans:bean id="expressionHandler" class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler" />

在Jersey动作bean里面是这样的:

@Inject
@Qualifier("authManager")
protected AuthenticationManager authenticationManager;

整个应用程序构建正常,jetty服务器启动没有问题(MyAuthenticationManager和org.springframework.security.authenticationManager都成功预先设置),但是当尝试使用autowired authmanager时,我得到空指针。

修改 我已成功将AuthenticationManager自动装入Stripes的Action Beans,但是Jersey的动作bean仍然存在问题,其中构造@Inject @Qualifier(...)不适用于AuthManager(但适用于其他自动装配的bean,尽管没有@Qualifier,只是@Inject)。

编辑2: 几个小时后试图找出为什么Spring没有将authenticationManager注入Jersey Beans,我解决了这个问题:

@Inject
@InjectParam("org.springframework.security.authenticationManager")
protected AuthenticationManager authenticationManager;

我不知道它是好的解决方案还是不是,但它正在运行,而且现在注入正确的身份验证管理器。

1 个答案:

答案 0 :(得分:0)

IANASG(我不是条纹大师。)我假设Action Bean是条纹构造?如果它不是由spring(实例化等)管理的话,那么就不会注入任何内容,因为它是一个POJO而Spring并不知道它的任何内容。

这看起来不正确

<context:component-scan base-package="org.springframework.security" />

base-package应该是代码中包含应扫描的bean的包。