Escenarios de aplicación
SpringSecurityoAuth2 tiene un diseño extraño, es decir, encapsula todas las pertenencias relacionadas con Access_Token en la OAuth2AccessToken, y luego, cuando se guarda, se serializará directamente el objeto en bytes y lo escribirá a la base de datos. Queremos leer la base de datos directamente en el servidor de recursos para recuperar el access_token para verificar la validez del token, pero no queremos introducir paquetes de contaminantes de contaminantes de dependencia relacionados con la seguridad de la velocidad. En este momento, puede copiar el código fuente de la única clase de implementación defaultOauth2AccessToken en SpringSecurity en nuestro proyecto, y luego leer Byte [] a través de JDBC, y restaurar el objeto DefaultOauth2AccessToken a través del propio mecanismo de deserialización del JDK. En este momento, encontrará un problema, es decir, el paquete original de OAuth2AccesStoken comienza con org.springframework.security, y después de copiar el código fuente, el nombre del paquete comienza con el paquete cn.com.xxxx, que nos definimos. De esta manera, cuando se deserializa, incluso si los campos de las dos clases son exactamente iguales, la falla de deserialización será causada por los diferentes nombres totalmente calificados de la información de clase almacenada en la corriente de bytes.
Solución
Podemos definir la subclase hereda el objeto de JDK y luego anular el método ReadClassDescriptor ():
@Override ObjectStreamClass ReadClassDescriptor () lanza IOException, classNotFoundException {ObjectStreamClass Read = Super.readClassDescriptor (); if (read.getName (). StartSwith ("Nombre del paquete original")) {class type = class.forname (read.getName (). Reemplazar ("nuevo paquete"); ObjectStreamClass.lookup (type);} return read;}De esta manera, no habrá errores al deserializar. El principio no es complicado. De hecho, al analizar la transmisión de bytes, la clase que debe analizarse como org.springframework.security.oauth2.common.defautoauthtoken se reemplaza con cn.com.xxxxxxx.defaulttoken Copiamos el código fuente para lograr el propósito del "decepción". En este escenario, solo podemos utilizar el servicio de autorización de SpringSecurityoAuth2 sin introducir el marco de seguridad de Springs en el proveedor de recursos. El proveedor de recursos lee la base de datos directamente para verificar la validez del token, en lugar de consultar el servicio autorizado.
Resumir
Lo anterior es todo el contenido de este artículo sobre la resolución de nombre de calificación completa de las clases modificadas durante la deserialización de JDK. Espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a otros temas relacionados en este sitio. Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!