Again ... Methode Sicherheit mit Spring Boot / Sicherheit: Fehler beim Erstellen Bean mit dem Namen 'methodSecurityInterceptor' "Dieses Objekt wurde bereits gebaut"

8

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.

%Vor%

ProviderManager.java:147:

%Vor%
- Ich glaube nicht, dass "provider" null ist, da ich sichergestellt habe, dass mein "authired" databaseAuthenticationProvider nicht funktioniert.
- 'toTest' kommt von 'authentication.getClass ()'. Es sollte nicht null sein. Recht? (Ich bin mir nicht sicher, ob ich das Problem im Entferntesten verstanden habe)


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:

%Vor%

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

    
elysch 24.07.2014, 23:17
quelle

2 Antworten

2

Ich möchte M.Deinum danken. Ich habe es endlich funktioniert.

Es ist so einfach:

%Vor%

Nun kann meine Service-Methode nur von der angegebenen Rolle wie folgt aufgerufen werden:

%Vor%

Sein:

%Vor%     
elysch 27.07.2014, 12:44
quelle
2

Nachdem ich mehrere Stunden lang jede Option getestet hatte, funktionierte es für mich so:

%Vor%     
Christian Contreras 20.03.2016 05:17
quelle