spring应用程序安全配置bean扫描
在我的项目中,我需要一个定制的userDetailsService,所以我在某个包中这样描述它: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文件中
@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