无法在 Spring Security 中识别身份验证提供者 user-service-ref
Posted
技术标签:
【中文标题】无法在 Spring Security 中识别身份验证提供者 user-service-ref【英文标题】:Unable to identify authentication-provider user-service-ref in Spring Security 【发布时间】:2014-05-09 19:03:24 【问题描述】:我正在我的项目中实施 Spring Security
在我的 DAO 类中,我定义了 loadUserByUsername
我的课是这样的
UserDAOImpl.java
@Repository
public class UserDAOImpl
public UserDetails loadUserByUsername(String name)throws UsernameNotFoundException
//implementation
在 Spring-security.xml 中
<authentication-manager>
<authentication-provider user-service-ref="UserDAOImpl">
</authentication-provider>
</authentication-manager>
但是当我运行程序时出现错误
Error creating bean with name 'org.springframework.security.authentication.dao.DaoAuthenticationProvider#0': Cannot resolve reference to bean 'UserDAOImpl' while setting bean property 'userDetailsService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'UserDAOImpl' is defined
谁能帮我解决这个问题?
【问题讨论】:
你是否在 servlet-context.xml 中定义了你的 UserDaoImpl bean? 框架不会自动检测到我作为@Repository UserDaoImpl 给出的它吗? 会的,但是你加<context:component-scan base-package="your.repository.class.package" />
了吗?
好吧,当我在 servlet-context.xml 中明确声明 bean 时,它可以正常工作 <bean id="userDAO" class="com.dao.UserDAOImpl"/>
,但如果没有它,将类名 UserDAOImpl 指定为 user-service-ref="UserDAOImpl"
它就不起作用。注意:base-package 路径是正确的。
当不在 xml 中显式声明 bean 时,user-service-ref="?"
这里应该给出什么?
【参考方案1】:
通常被组件扫描的 bean 是驼峰式的,以小写字符开头,因此 bean 将作为 userDAOImpl
存在于应用程序上下文中(而不是 UserDAOImpl
)
将您的spring-security.xml
sn-p 更改为
<authentication-manager>
<authentication-provider user-service-ref="userDAOImpl">
</authentication-provider>
</authentication-manager>
希望这对你有用。
【讨论】:
【参考方案2】:呼……搞定了。
搬家
<context:component-scan base-package="app.com,app.com.controller,app.com.dao,app.com.service,app.com.model"/>
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"
p:basename="messages"/>
从 dispatcher-servlet 到 application-context.xml
@Service("userDAOImpl") 类名注解
有人愿意告诉它为什么开始工作吗?
【讨论】:
以上是关于无法在 Spring Security 中识别身份验证提供者 user-service-ref的主要内容,如果未能解决你的问题,请参考以下文章
在 spring-security 的身份验证中无法获取自定义信息
ajax 调用无法识别 Spring Security 会话超时