2016-08-01 97 views
0

我有一个身份验证服务和一个客户端模块,可以包含它以检索经过身份验证的用户并验证令牌。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没有注释类(这是否正确?)

我得到的错误是:

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不在春天背景下正确可用

+1

确保您的应用程序正在扫描(组件扫描)MyUserHolder类,然后自动接线客户端中的MyUser。 – ankidaemon

+0

愚蠢的我,解决了一切:)如果你将它作为答案发布,我会接受它 –

回答

0

通常会出现此问题时春找不到豆自动装配,自动装配之前这意味着,相应的bean需要创建。 通过确保应用程序正在扫描(组件扫描)MyUserHolder类,然后自动接线客户端中的MyUser将解决此类问题。

0
<context:component-scan base-package="com.org.package1,com.org.package2" /> 

确保软件包包含未发现bean的类发生异常的类。你可以使用逗号(,)分隔多个软件包扫描。

Spring会检查在component scan定义的包内自动注册的bean(annotations)。

0

如果你想在任何你想要的地方获得当前用户,我会推荐我的方法。
我创建了UserUtil类。
当用户未通过身份验证时,您将获得空值。

public static YourUserPrincipalDto getCurrentUser(){ 
    try { 
     return (YourUserPrincipalDto) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 
    } catch (Exception e) { 
     return null; 
    } 
}