和 Struts2-spring 插件创建 Web 应用程序。
这是我的应用程序上下文的一个片段.xml
<bean id="sessionFactory" scope="singleton"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml" />
</bean>
<!-- Springs Hibernate Transaction Manager -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:annotation-driven />
<!-- Create DAO Objects -->
<bean id = "userDao" class = "org.hitplay.users.dao.UserDao" scope = "singleton">
<property name ="sessionFactory" ref = "sessionFactory" />
</bean>
<bean id = "adminDao" class = "org.hitplay.admin.dao.AdminDao" scope = "singleton">
<property name ="sessionFactory" ref = "sessionFactory" />
</bean>
<bean id="authenticateLoginService" class="org.hitplay.services.AuthenticateLoginService" scope="singleton">
<property name="userDao" ref="userDao" />
<property name="adminDao" ref="adminDao" />
</bean>
<bean id="accountAuthenticationManager" class="org.hitplay.authentication.manager.AccountAuthenticationManager" scope="singleton">
<property name="authenticateLoginService" ref="authenticateLoginService" />
</bean>
这是我的帐户身份验证管理器类
@Transactional
public class AccountAuthenticationManager implements AuthenticationManager {
protected static Logger logger = Logger.getLogger("service");
// Our custom DAO layer
private AuthenticateLoginService authenticateLoginService;
public AuthenticateLoginService getAuthenticateLoginService() {
return authenticateLoginService;
}
public void setAuthenticateLoginService(
AuthenticateLoginService authenticateLoginService) {
this.authenticateLoginService = authenticateLoginService;
}
public Authentication authenticate(Authentication auth) throws AuthenticationException {
System.out.println(authenticateLoginService);
//Some more codes here
}
正如您在映射中看到的那样,我们将authenticateLoginService
注入AccountAuthenticationManager
类中。 我们甚至为authenticateLoginService
提供了二传手和吸盘手,但正如我们在运行
authenticate(Authentication auth)
方法authenticationLoginService
返回 null,我们不知道为什么会发生这种情况。请注意,AccountAuthenticationManager 不是 Struts 操作
我们目前正在使用Struts2-Spring插件和Spring Security。
StackOverflow 不喜欢有很长的评论列表,所以我会在这里继续。好的,所以您的系统中有两个不同的AccountAuthenticationManager
实例。假设 Spring 在启动时创建的那个叫做 instanceA
和未知的叫做 instanceB
。如果 instanceB
不是由 Spring 容器创建的,那么instanceB
无法解决它的依赖关系( AuthenticateLoginService
)。如果可以调试到系统中,则可能需要查看线程转储并找出instanceB
的时间和位置以及由谁创建和创建?