Ich habe mich gefragt, was ich hier falsch mache, um einen Benutzer zu authentifizieren. Ich habe eine Anwendung, bei der der Benutzer mehrere Schritte unternimmt, um seinen Account zu aktivieren, und dabei möchte ich das Login-Formular umgehen und sie direkt zu ihrem Dashboard führen.
So sieht meine automatisierte Login-Funktion aus:
%Vor%Ich muss die DaoAuthenticationProvider-Klasse als Authentifizierungsanbieter verwenden. Ich habe überprüft, dass ich ein UserDetails-Modell mit den richtigen Anmeldeinformationen, ID, Berechtigungsrollen usw. erhalte.
Wenn ich die Authenticate-Methode aufruft, stoße ich irgendwo in der DaoAuthenticationProvider-Klasse auf einen Null-Pointer:
org.springframework.security.authentication.AuthenticationServiceException beim org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser (DaoAuthenticationProvider.java:109) beim org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate (AbstractUserDetailsAuthenticationProvider.java:132) beim com.bosch.actions.BaseController.doAutoLogin (BaseController.java:659) . . . Verursacht von: java.lang.NullPointerException at org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser (DaoAuthenticationProvider.java:101)
Ich bin mir wirklich nicht sicher was null ist, da ich den Quellcode nicht habe.
Bearbeiten Ich konnte den Quellcode hier finden - Ссылка
Ich konnte den Nullzeiger umgehen, indem ich den UserDetailsService für das Objekt explizit festlegte:
%Vor%Aber jetzt bekomme ich eine Ausnahme für schlechte Anmeldeinformationen, wenn ich weiß, dass das angegebene Passwort korrekt ist, weil ich es im Debugger im Objekt UserDetails gesehen habe, das früher im Code gesetzt wurde.
org.springframework.security.authentication.BadCredentialsException: Schlechte Anmeldedaten bei org.springframework.security.authentication.dao.DaoAuthenticationProvider.additionalAuthenticationChecks (DaoAuthenticationProvider.java:87) beim org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate (AbstractUserDetailsAuthenticationProvider.java:149)
Ich konnte die Authentifizierung durch Zusammenfügen aller in der Spring-Bean-Definition definierten Eigenschaften und durch programmgesteuertes Setzen dieser Eigenschaften für das DaoAuthenticationProvider-Objekt durchführen. Rückblickend scheint das eine dumme Frage gewesen zu sein, aber ich hoffe, es hilft jemandem!
Korrigierter Code:
%Vor%Tags und Links java spring authentication spring-security dao