2016-08-01 35 views
0

Ich habe einen Authentifizierungsdienst und ein Modul für die Clients, die enthalten sein können, um den authentifizierten Benutzer abzurufen und das Token zu überprüfen.Frühling autowired Benutzer

Was ich erreichen möchte, ist in der Lage, dies zu tun: @Autowired MyUser user, um den richtigen Benutzer (Anfrage Umfang) abzurufen.

Was ich getan habe:

Im separaten Modul, das die Clients können sein:

@Configuration 
public class MyUserHolder { 
    @Bean 
    @Scope(value="request", proxyMode= ScopedProxyMode.TARGET_CLASS) 
    public MyUser getMyUser() { 
     return (MyUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 
    } 
} 

Und im Client:

@Autowired MyUser user 

Es gibt keine Anmerkungen auf dem MyUser Klasse (ist das korrekt?)

Der Fehler, den ich bekomme, ist:

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. 

Ich bin nicht sicher, ob das Problem kommt von der Tatsache, dass das Objekt und Anmerkungen in einem anderen Modul (inklusive Glas) sind, oder wenn die Anmerkungen nur unvollständig sind ... Es fühlt sich an wie das MyUserHolder nicht ist korrekt im Spring-Kontext verfügbar

+1

Stellen Sie sicher, dass Ihre Anwendung die MyUserHolder-Klasse scannt (Komponentenscan), bevor MyUser im Client automatisch verkabelt wird. – ankidaemon

+0

Dumm mich, das hat alles gelöst :) Wenn du es als Antwort postest, werde ich es akzeptieren –

Antwort

0

Im Allgemeinen tritt dieses Problem auf, wenn Spring keine Bean zum Autowire finden kann, was bedeutet, dass vor dem Autowiren eine entsprechende Bean erstellt werden muss. Indem Sie sicherstellen, dass die Anwendung die MyUserHolder-Klasse scannt (Komponentenscan), bevor MyUser im Client automatisch verkabelt wird, werden solche Probleme behoben.

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

Vergewissern Sie sich, dass das Paket die Klasse enthält, in der die Bean-Ausnahme nicht gefunden wurde. Sie können den Mehrfachpaket-Scan verwenden, indem Sie ihn durch Komma (,) voneinander trennen. Spring prüft automatisch registrierte Bohnen (annotations) innerhalb des in component scan definierten Pakets.

0

Wenn Sie aktuelle Benutzer erhalten möchten, wo Sie wollen, würde ich meinen Ansatz empfehlen.
Ich habe UserUtil-Klasse erstellt.
erhalten Sie null, wenn der Benutzer nicht authentifiziert ist.