Spring自动装配的用户

时间:2016-08-01 16:07:14

标签: java spring spring-mvc spring-security autowired

我有一个身份验证服务和一个客户端模块,可以包含该模块以检索经过身份验证的用户并验证令牌。

我想要达到的目的是能够做到这一点: @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不正确在春天的背景下

3 个答案:

答案 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类将解决此类问题。