我有一个身份验证服务和一个客户端模块,可以包含该模块以检索经过身份验证的用户并验证令牌。
我想要达到的目的是能够做到这一点:
@Autowired MyUser user
检索正确的用户(请求范围)。
我做了什么:
在客户可以包含的单独模块中:
@Configuration
public class MyUserHolder {
@Bean
@Scope(value="request", proxyMode= ScopedProxyMode.TARGET_CLASS)
public MyUser getMyUser() {
return (MyUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
}
}
在客户端:
@Autowired MyUser user
MyUser类没有注释(这是正确的吗?)
我得到的错误是:
org.springframework.beans.factory.NoSuchBeanDefinitionException:
No qualifying bean of type [...MyUser] found for dependency [...MyUser]:
expected at least 1 bean which qualifies as autowire candidate for this dependency.
我不确定问题是否来自对象和注释在另一个模块(包含jar)中,或者注释是否只是不完整......感觉MyUserHolder不正确在春天的背景下
答案 0 :(得分:0)
<context:component-scan base-package="com.org.package1,com.org.package2" />
确保包中包含发现bean未找到异常的类。您可以使用`逗号(,)
分隔多个包扫描 Spring会自动检查annotations
中定义的包中自动注册的bean(component scan
)。
答案 1 :(得分:0)
如果您想让当前用户随心所欲,我会推荐我的方法 我创建了UserUtil类 当用户未经过身份验证时,您将获得null。
public static YourUserPrincipalDto getCurrentUser(){
try {
return (YourUserPrincipalDto) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
} catch (Exception e) {
return null;
}
}
答案 2 :(得分:0)
一般情况下,当Spring无法找到自动装配bean时会发生此问题,这意味着在自动装配之前,需要创建相应的bean。 通过确保应用程序在客户端自动连接MyUser之前扫描(组件扫描)MyUserHolder类将解决此类问题。