Meine Beispielanwendung funktioniert in der lokalen Umgebung. Aber es funktioniert nicht in der Java8-Standardumgebung. Das folgende Projekt ist das Beispielanwendungsprojekt.Problem mit der Verwendung von Spring OAuth in der Java8-Standardumgebung
https://github.com/nosix/appengine-java8-spring-oauth2
Der folgende Fehler tritt in Java8 Standardumgebung:
Authentication Failed: Could not obtain access token
I Protokolle an den Quellcode des Frühlings OAuth hinzugefügt und die Ursache untersucht. Die Ursache des Fehlers scheint zu sein, dass die Sitzungsdaten verloren gegangen sind.
Es funktionierte wie folgt:
preservedState
in AuthorizationCodeAccessTokenProvider::getParametersForTokenRequest
null ist. Also, wird geworfen. Dies ist die Ursache des Fehlers.
setPreservedState
Methode wird in OAuth2RestTemplate::acquireAccessToken
aufgerufen. Zu diesem Zeitpunkt ist preservedState
auf null gesetzt.
DefaultOAuth2ClientContext
Instanz hat preservedState
. preservedState
von DefaultOAuth2ClientContext
Instanz ist Null in Java8-Standardumgebung. Aber, es ist nicht null in der lokalen Umgebung.
DefaultOAuth2ClientContext
Instanz in der Sitzung gespeichert werden. Ich verstehe, dass es im Arbeitsspeicher in der lokalen Umgebung und im Datenspeicher in der Standardumgebung gespeichert ist.
Aus dem oben genannten, vermutete ich, dass die Sitzungsdaten verloren gingen.
Ich steckte in der Untersuchung fest. Gibt es Informationen, die als Anhaltspunkt für die Lösung dienen?
Danke Mann, das funktioniert! Ich habe Sachen in Ihrem Commit in Java umgewandelt, aber ansonsten hatte ich keine großen Probleme.Ich kann nicht glauben, dass das Speichern von Sitzungen in App Engine nicht funktioniert, obwohl sie sagen:/ – Lili
[Die Lösung] (https://github.com/int128/graduleupdate/commit/2405310dd0da4e19cf4d4b55a16f8466c1d62cc8) funktioniert. Ich habe [DatastoreSessionRepository] (https://github.com/nosix/appengine-java8-spring-oauth2/blob/master/application/src/main/kotlin/org/musyozoku/appengine/session/DatastoreSessionRepository.kt) erstellt und darauf verwiesen dazu. Das funktioniert auch. Vielen Dank! – nosix
Für Leute, die nicht von Kotlin kommen, könnte dies hilfreich für das Kopieren und Einfügen sein (zögern Sie nicht, Lombok durch expliziten Code zu ersetzen) https://gist.github.com/lilianaziolek/6851c2f81be81eae2207ec863f41f484 – Lili