栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

无法自动连线栏位:私人org.springframework.security.core.userdetails.UserDetailsS​​ervice

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

无法自动连线栏位:私人org.springframework.security.core.userdetails.UserDetailsS​​ervice

更新(提供完整示例后)

看来您有多个问题。

web.xml与AbstractAnnotationConfigDispatcherServletInitializer

您创建的应用程序有一个web.xml,用于配置名为的DispatcherServlet

mvc-dispatcher
。的
mvc-dispatcher
配置已将
mvc-dispatcher-servlet.xml
软件包中的所有bean装入
com.springapp.sectest
。这意味着
mvc-dispatcher
可以找到您的
UserDetailsService

该应用程序还具有一个AbstractAnnotationConfigDispatcherServletInitializer,它创建了一个

DispatcherServlet
加载
WebConfig
Java配置的文件。这
DispatcherServlet
无法看到创建的豆类
mvc-dispatcher

简而言之,您应该

DispatcherServlet
使用web.xml
进行配置,或者
AbstractAnnotationConfigDispatcherServletInitializer
不要同时使用两者。

getRootConfigClasses与getServletConfigClasses

getRootConfigClasses中的任何配置通常称为根配置或父配置,并且无法查看在getServletConfigClasses中定义的bean。Spring
Security使用由

@EnableWebSecurity
注释创建的名为springSecurityFilterChain的过滤器保护在getRootConfigClasses中定义的应用程序。这意味着通常最好将Spring
Security的配置放在getRootConfigClasses中。对此有一些例外,例如,如果您想在Spring MVC控制器上进行方法安全性。

getServletConfigClasses中的任何配置通常都称为子配置,并且可以查看在getRootConfigClasses中定义的bean。getServletConfigClasses配置,

DispatcherServlet
并且必须包含Spring
MVC的bean(即Controllers,ViewResovlers等)。getRootConfigClasses中定义的任何Spring MVC
bean都是可见的,但未使用。

这种设置虽然有点令人困惑,但允许您

DispatcherServlet
使用隔离配置来拥有多个实例。实际上,很少有多个
DispatcherServlet
实例。

根据上述信息,您应该将

UserDetailsService
声明及其所有依赖的bean移到getRootConfigClasses。这将确保SecurityConfig.java可以找到
UserDetailsService

拉请求修复

我已经提交了一份PR来获取您的应用程序,以便它以没有错误的开头https://github.com/worldcombined/AnnotateFailed/pull/1。一些注意事项

  • 该测试未使用父级和子级上下文,因此未反映运行该应用程序
  • 我不得不移动资源文件夹,以便正确拾取
  • 我没有这样做,所以您实际上可以进行身份​​验证。没有login.jsp,并且您提供的UserDetailsS​​ervice始终返回null。相反,我尝试证明这里的错误已得到解决。

原始答案

基于此评论:

@ComponentScan在我的mvc-dispatcher-servlet.xml中作为进行

看来您是在Dispatcher配置中而不是在根上下文中配置服务。

Spring
Security的配置通常在根上下文中配置。例如,可以如下所示扩展AbstractSecurityWebApplicationInitializer:

import org.springframework.security.web.context.*;public class SecurityWebApplicationInitializer      extends AbstractSecurityWebApplicationInitializer {}

您如何导入安全配置?如果Spring Security配置在根上下文中,则它将看不到在Dispatcher Servlet上下文中定义的bean。

解决方案是在根上下文中移动服务的配置,或将Spring
Security配置移动到调度程序的ApplicationContext。例如,如果您的调度程序servlet被命名为mvc,那么将Spring
Security配置移动到调度程序上下文中将如下所示。

public class SecurityWebApplicationInitializer      extends AbstractSecurityWebApplicationInitializer {    protected String getDispatcherWebApplicationContextSuffix() {        return "mvc";    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/507503.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号