【发布时间】:2010-08-24 00:43:01
【问题描述】:
我正在研究 Peter Mularien 的 Spring Security 3,但在设置 UserDetailsManager 时遇到问题。
我按如下方式创建 JdbcUserDetailsManager bean:
<bean id="jdbcUserService" class="org.springframework.security.provisioning.JdbcUserDetailsManager">
<property name="dataSource" ref="mySqlDb" />
<property name="authenticationManager" ref="authenticationManager" />
</bean>
并像这样在我的控制器中自动装配其 UserDetailsManager 接口:
@Autowired
public UserDetailsManager userDetailsManager;
当我启动应用程序进行测试时,我得到以下异常:
Error creating bean with name 'changePasswordController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.springframework.security.provisioning.UserDetailsManager com.ebisent.web.ChangePasswordController.userDetailsManager; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [org.springframework.security.provisioning.UserDetailsManager] is defined: expected single matching bean but found 2: [org.springframework.security.provisioning.JdbcUserDetailsManager#0, jdbcUserService]
我搜索了我的项目,看看我是否可能在其他地方设置了 (Jdbc)UserDetailsManager,但我似乎没有这样做。如果我删除 bean 定义中的“id”属性,则歧义在 JdbcUserDetailsManager#0 和 JdbcUserDetailsManager#1 之间。
我的 web.xml 在两个地方引用了 app-config.xml:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/spring/app-config.xml</param-value>
</context-param>
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/spring/app-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
【问题讨论】:
-
你是如何加载应用程序上下文的?
-
我添加了一个编辑,显示我的 web.xml 文件中有两次 app-config.xml。这是我问题的根源吗?