Anwendungsszenarien
SpringSecurityoAuth2 hat ein seltsames Design, dh alle Habseligkeiten, die sich auf Access_Token in die OAuth2AccessToken beziehen, und dann serialisiert es das Objekt direkt in Bytes und schreibt es in die Datenbank. Wir möchten die Datenbank direkt im Ressourcenserver lesen, um die Access_Token abzurufen, um die Gültigkeit des Tokens zu überprüfen. Zu diesem Zeitpunkt können Sie den Quellcode der einzigen Implementierungsklasse DefaultOAUTH2AccessToken in Springsicherheit in unser Projekt kopieren und dann Byte [] über JDBC wiederherstellen und den DefaultOATh2Accessoken -Objekt über den Deserialisierungsmechanismus des JDK wiederherstellen. Zu diesem Zeitpunkt werden Sie auf ein Problem stoßen, dh das ursprüngliche OAuth2AccessOken -Paket beginnt mit org.springframework.security, und nachdem wir den Quellcode kopieren, beginnt der Paketname mit dem Paket cn.com.xxxx, das wir uns selbst definieren. Auf diese Weise wird bei der Deserialisierung, selbst wenn die Felder der beiden Klassen genau gleich sind, der Deserialisierungsversagen durch die verschiedenen voll qualifizierten Namen der im Byte -Stream gespeicherten Klasseninformationen verursacht.
Lösung
Wir können die Unterklasse definieren, die die ObjectInputStream des JDK erbt und dann die Methode readClassDescriptor () überschreibt:
@Override Protected ObjectStreamClass ReadClassDescriptor () löst IOException, classNotFoundException aus {ObjectStreamClass Read = Super.ReadClassDescriptor (); if (read.getName (). StartsWith ("Original -Paketname") {class type = class. ObjectStreamClass.lookup (Typ);} return read;}Auf diese Weise wird es bei der Deserialisierung keine Fehler geben. Das Prinzip ist nicht kompliziert. Tatsächlich wird beim Parsen des Byte -Streams die Klasse, die als org.springframework.security.oauth2.Common.defautoautouthToken analysiert werden sollte, ersetzt durch den Cn.com.xxxxxx.defaultoautoken Wir haben den Quellcode kopiert, um den Zweck von "Decption" zu erreichen. In diesem Szenario können wir nur den Autorisierungsdienst von SpringSecurityoAuth2 verwenden, ohne das Framework in Springecurity in den Ressourcenanbieter einzuführen. Der Ressourcenanbieter liest die Datenbank direkt, um die Gültigkeit des Tokens zu überprüfen, anstatt den autorisierten Dienst abzufragen.
Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels über die vollqualifizierte Namensauflösung modifizierter Klassen während der JDK-Deserialisierung. Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!