所以,在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;
我不知道它是好的解决方案还是不是,但它正在运行,而且现在注入正确的身份验证管理器。
答案 0 :(得分:0)
IANASG(我不是条纹大师。)我假设Action Bean是条纹构造?如果它不是由spring(实例化等)管理的话,那么就不会注入任何内容,因为它是一个POJO而Spring并不知道它的任何内容。
这看起来不正确
<context:component-scan base-package="org.springframework.security" />
base-package应该是代码中包含应扫描的bean的包。