Scénarios d'application
SpringSecurityoAuth2 a une conception étrange, c'est-à-dire qu'elle résume tous les effets liés à Access_token dans l'Oauth2Accesstoken, puis lorsqu'il est enregistré, il sérialisera directement l'objet en octets et l'écrira dans la base de données. Nous voulons lire la base de données directement dans le serveur de ressources pour récupérer l'accès_token pour vérifier la validité du jeton, mais nous ne voulons pas introduire des packages de pot polluants de dépendance liés à Springsecurity. À l'heure actuelle, vous pouvez copier le code source de la seule classe d'implémentation defaultoAuth2AccessToken dans SpringSecurity dans notre projet, puis lire l'octet [] via JDBC, et restaurer l'objet defaultOAuth2AccessToken via le mécanisme de désérialisation de JDK. Pour le moment, vous rencontrerez un problème, c'est-à-dire que le package OAuth2AccessToken d'origine commence par org.springframework.security, et après avoir copie le code source, le nom du package commence par le package cn.com.xxxx, que nous nous définissons. De cette façon, lors de la désérialisation, même si les champs des deux classes sont exactement les mêmes, la défaillance de la désérialisation sera causée par les différents noms entièrement qualifiés des informations de classe stockées dans le flux d'octets.
Solution
Nous pouvons définir la sous-classe hérite de la méthode objectInputStream de JDK, puis remplacer la méthode readclassDescriptor ():
@Override Protected ObjectStreamClass readClassDescriptor () lève ioException, classNotFoundException {objectStreamClass read = super.readclassDescriptor (); if (read.getName (). StartSwith ("Original Package Name")) {class Type = Class.forname (read.getName (). Replace ("new package")); ObjectStreamClass.lookup (type);} return read;}De cette façon, il n'y aura pas d'erreurs lors de la désérialisation. Le principe n'est pas compliqué. En fait, lors de l'analyse du flux d'octets, la classe qui doit être analysée comme org.springframework.security.oauth2.common.defautoauthtoken est remplacée par le CN.com.xxxxx.defaultoauthToken, nous avons copié le code source pour atteindre le but de "Deption". Dans ce scénario, nous ne pouvons utiliser le service d'autorisation de SpringSecurityoAuth2 sans introduire le cadre de SpringSecurity dans le fournisseur de ressources. Le fournisseur de ressources lit directement la base de données pour vérifier la validité du jeton, plutôt que d'interroger le service autorisé.
Résumer
Ce qui précède est l'intégralité du contenu de cet article sur la résolution du nom complète des classes modifiées pendant la désérialisation JDK. J'espère que ce sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!