无法在 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 给出的它吗? 会的,但是你加&lt;context:component-scan base-package="your.repository.class.package" /&gt;了吗? 好吧,当我在 servlet-context.xml 中明确声明 bean 时,它可以正常工作 &lt;bean id="userDAO" class="com.dao.UserDAOImpl"/&gt;,但如果没有它,将类名 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 的身份验证中无法获取自定义信息

Spring Security:无法在前端进行身份验证

Spring Security 无法识别自己的加密

ajax 调用无法识别 Spring Security 会话超时

Spring Boot + Thymeleaf Security 无法识别

无法使用 Angular 和 Spring Security 设置身份验证标头