Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
spring应用程序安全配置bean扫描_Spring_Spring Security_Spring Annotations_Spring Bean - Fatal编程技术网

spring应用程序安全配置bean扫描

spring应用程序安全配置bean扫描,spring,spring-security,spring-annotations,spring-bean,Spring,Spring Security,Spring Annotations,Spring Bean,在我的项目中,我需要一个定制的userDetailsService,所以我在某个包中这样描述它: @Service @Ihm(name = "userDetailsService")// ignore Ihm, it's just a custom annotation, which works fine public class UserDetailsServiceImpl implements UserDetailsService 在application-security.xml文件中

在我的项目中,我需要一个定制的userDetailsService,所以我在某个包中这样描述它:

@Service
@Ihm(name = "userDetailsService")// ignore Ihm, it's just a custom annotation, which works fine
public class UserDetailsServiceImpl implements UserDetailsService 
在application-security.xml文件中,我添加了组件扫描

<context:component-scan base-package="path(including the userDetailsService for sure)" />

<context:annotation-config />

这并没有帮助我找到带注释的bean,我得到的bean没有定义的异常

就我而言,唯一有效的方法是: 1.删除服务注释 2.使用bean:bean、id、class在application-security.xml中创建bean。 这个很好用

更有趣的是,当我保持组件扫描和注释时,我得到了一个重复的ID(不止一个bean,要求指定ID)错误

注册了多个UserDetails服务。请在或元素中使用特定的Id引用。

这意味着
@Service
确实创建了bean,但是security.xml不会找到它吗?

Spring安全性是在bean名称上自动连接bean,用于
UserDetailsService
UserDetailsService

@Service
public class UserDetailsServiceImpl implements UserDetailsService 
上面的代码(与您的代码一样)将生成一个类型为
UserDetailsService
的bean,但是名称是
userDetailsServiceImpl
,而不是
UserDetailsService
,因此Spring Security不会使用您的bean,也不会检测到您的bean。(有关命名约定,请参见Spring)

要解决此问题,请更改spring安全配置并将其更改为
userDetailsServiceImpl
bean

<authentication-manager>
    <authentication-provider user-service-ref='userDetailsServiceImpl'/>
</authentication-manager>
任何一种方法都会奏效

链接


  • 发布堆栈跟踪和附加配置。此外,在进行组件扫描时,bean名称将是
    userDetailsServiceImpl
    的使用暗示了
    ,因此您可能希望删除它。谢谢,没错,bean的名称实际上是userDetailsServiceImpl…您能告诉我y吗?如果名称是这样,t他在服务中的名字只适用于注射材料的自动连线?
    <authentication-manager>
        <authentication-provider user-service-ref='userDetailsServiceImpl'/>
    </authentication-manager>
    
    @Service("userDetailsService")
    public class UserDetailsServiceImpl implements UserDetailsService