我定义了一个CustomUserDetailsService,它使用自动装配的帐户从Hibernate数据库中提取用户名。在尝试访问重定向到Spring Security登录页面的http://localhost:8084/article
之后,我尝试使用有效凭据登录。这是我得到的错误:
您的登录尝试失败,请重试。
原因:null
经过一些调试后,我意识到AccountDao实际上从未实例化过,而且它是空的。另一方面,这在我定义的Spring MVC的ArticleAccount中工作得很好(参见http://localhost:8084/article/add
)。为什么会这样?
由于测试用例非常大,以下是URL: https://bitbucket.org/d33tah/javazaur/src/4e5451b
答案 0 :(得分:2)
spring-security.xml和dispatcher-servlet.xml之间不共享您的配置。这意味着您声明< context:component-scan>在dispatcher-servlet.xml中没有应用于spring-security.xml中声明的bean,包括你的CustomUserDetailsService
bean。
将以下内容添加到spring-security.xml应该使自动布线工作:
<context:annotation-config/>
<context:component-scan base-package="pl.javazaur" />
答案 1 :(得分:1)
这些是您的组件扫描标签。
<context:component-scan base-package="pl.javazaur.dao" />
<context:component-scan base-package="pl.javazaur.pojo" />
<context:component-scan base-package="pl.javazaur.controller" />
这是您的CustomUserDetailsService包。
pl.javazaur.CustomUserDetailsService
所以CustomUserDetailsService没有scaned包。
解决方案:使用此组件扫描
<context:component-scan base-package="pl.javazaur" />