Spring 自动装配用户
Spring autowired user
我有一个身份验证服务和一个客户端模块,可以包含它以检索经过身份验证的用户并验证令牌。
我想要实现的是能够做到这一点:
@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 上没有注释class(正确吗?)
我得到的错误是:
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 不正确可用在 spring-context
<context:component-scan base-package="com.org.package1,com.org.package2" />
确保包中包含 class 未找到 bean 异常的地方。您可以使用逗号 (,)
分隔多个包扫描
Spring 将检查在 component scan
.
中定义的包内自动注册的 bean (annotations
)
如果您想在任何地方获取当前用户,我会推荐我的方法。
我创建了 UserUtil class.
当用户未通过身份验证时,您会得到 null。
public static YourUserPrincipalDto getCurrentUser(){
try {
return (YourUserPrincipalDto) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
} catch (Exception e) {
return null;
}
}
通常当Spring找不到要自动装配的bean 时会出现此问题,这意味着在自动装配之前,需要创建相应的bean。
通过确保应用程序正在扫描(组件扫描)MyUserHolder class,然后在客户端自动连接 MyUser 将解决此类问题。
我有一个身份验证服务和一个客户端模块,可以包含它以检索经过身份验证的用户并验证令牌。
我想要实现的是能够做到这一点:
@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 上没有注释class(正确吗?)
我得到的错误是:
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 不正确可用在 spring-context
<context:component-scan base-package="com.org.package1,com.org.package2" />
确保包中包含 class 未找到 bean 异常的地方。您可以使用逗号 (,)
分隔多个包扫描Spring 将检查在 component scan
.
annotations
)
如果您想在任何地方获取当前用户,我会推荐我的方法。
我创建了 UserUtil class.
当用户未通过身份验证时,您会得到 null。
public static YourUserPrincipalDto getCurrentUser(){
try {
return (YourUserPrincipalDto) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
} catch (Exception e) {
return null;
}
}
通常当Spring找不到要自动装配的bean 时会出现此问题,这意味着在自动装配之前,需要创建相应的bean。 通过确保应用程序正在扫描(组件扫描)MyUserHolder class,然后在客户端自动连接 MyUser 将解决此类问题。