Ich möchte Methoden-Sicherheit implementieren.
Ich habe ein Problem mit @Secured- und @ PreAuth-Annotationen. Jedes Mal, wenn ich eines dieser Elemente zu meiner Serviceschnittstelle hinzufüge, erhalte ich eine Ausnahme wie die folgende. Ohne sie läuft meine App gut.
%Vor%Es ist eine REST-Dienstanwendung.
Hier sind einige relevante Teile meiner Konfiguration. Bitte lassen Sie mich wissen, wenn ich noch etwas hinzufügen sollte.
%Vor%Und:
%Vor%Laut AlreadyBuiltException-Dokumentation :
Wird ausgelöst, wenn AbstractSecurityBuilder.build () zwei oder mehrere Male auftritt.
Aber ich kann nicht herausfinden, warum der Frühling das macht.
Jeder Ponter würde sehr geschätzt werden.
Danke euch allen.
Hier stelle ich noch CallStack
vor %Vor%
////// Update 1 //////
Basierend auf @ M.Dainum habe ich mein authenticationManager
entfernt.
Ich habe versucht, meine databaseAuthenticationProvider
auf drei Arten zu definieren (in diesem Beitrag enthalten), aber alle führten zu derselben NullPointerException bei der Authentifizierung.
ProviderManager.java:147:
%Vor%
getProviders()
contins:
[null, org.springframework.security.authentication.AnonymousAuthenticationProvider@490adcdf]
Es ist ein Fehler aufgetreten: Der Anbieter ist null. So ist das "Autowiriring" nicht möglich.
Ich denke, das liegt daran, dass etwas wie: auth.authenticationProvider(databaseAuthenticationProvider);
, databaseAuthenticationProvider
statisch sein sollte und das Autowiring verhindert. Richtig?
Wenn ich es mit "neu" erzeuge, dann ist messageDigestPasswordEncoder
gleich null und so weiter.
Also ... Wie soll ich das lösen?
Op1:
%Vor%Op2:
%Vor%Op3:
%Vor%
////// Update 2 //////
Um die "Autowiriring" -Funktion zu "erzwingen", wurde versucht, @Autowire
aus dem Attribut zu entfernen und es einer Setter-Methode wie dieser hinzuzufügen:
Und jetzt: zurück zu quere eins:
wird verursacht durch: org.springframework.beans.factory.BeanDefinitionStoreException: Factory-Methode [public org.aopalliance.intercept.MethodInterceptor org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration.methodSecurityInterceptor () gibt java.lang aus .Exception] hat Ausnahme ausgelöst; verschachtelte Ausnahme ist org.springframework.security.config.annotation.AlreadyBuiltException: Dieses Objekt wurde bereits erstellt
Ich denke, das Problem war nicht, dass ich mein eigenes AuthenticationManager
hatte
Irgendwo wird noch zweimal gebaut.
Wie finden Sie es?
Übrigens ... es hat immer noch einen Nullwert:
************************************************ ** databaseAuthenticationProvider es null
Nachdem ich mehrere Stunden lang jede Option getestet hatte, funktionierte es für mich so:
%Vor%Tags und Links spring spring-security spring-boot autowired