Spring Security: autowire ProviderManager
Ich versuche, ein Programm zu validieren Benutzer-login/pass-mit Spring Security, damit ich Zugriff auf die ProviderManager
. Ich möchte, dass es automatisch injiziert in meine @Controller
.
Mein code sieht wie folgt aus:
import org.springframework.security.authentication.ProviderManager;
//...
@Controller
public class MyController {
@Autowired
private ProviderManager authenticationManager;
Aber wenn ich versuche, um die Anwendung auszuführen, bekomme ich diese Fehlermeldung:
No unique bean of type [org.springframework.security.authentication.ProviderManager] is defined:
expected single matching bean but found 2:
[org.springframework.security.authentication.ProviderManager#0, org.springframework.security.authenticationManager]
Was könnte die Ursache sein oder wie könnte ich es lösen?
Bin ich mit Spring Security 3.0.0-RC1 mit Spring 3.0.1, und ich habe nicht definiert, jede ProviderManager
bean. Ich habe erfolgreich verwendet:
@Resource
private ProviderManager authenticationManager;
in anderen Projekten, aber javax.annotation.Resource
wird nicht unterstützt, GÄ.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es zwei
AuthenticationManager
s in der Kontext:org.springframework.security.authenticationManager
ist gefüllt mit Authentifizierungs-Providern explizit deklariert<authentication-manager>
org.springframework.security.authentication.ProviderManager#0
ist gefüllt mit implizit deklariert Anbieter (erinnere dich an mich, anonym und so weiter) und delegiert die Authentifizierung Anforderung anorg.springframework.security.authenticationManager
als fallback.So, ich denke, Sie müssen
@Qualifier
verwendet den angegebenen Namen zu wählen, die Bohnen, wenn Ihre Lösung wählt, die Bohne, weil seine alias entspricht dem Feld name.Die Fehlermeldung geht Weg, darunter ein alias für den authentication-manager:
und ein Upgrade auf Spring Security 3.0.0 finale.