Сценарии приложения
SpringsecurityOauth2 имеет странный дизайн, то есть он инкапсулирует все вещи, связанные с Access_token в OAuth2accessToken, а затем при сохранении он будет напрямую сериализовать объект на байты и записать его в базу данных. Мы хотим прочитать базу данных непосредственно на сервере ресурсов, чтобы извлечь access_token, чтобы проверить обоснованность токена, но мы не хотим вводить пакеты, загрязняющие загрязняющие банки, связанные с Springsecurity. В настоящее время вы можете скопировать исходный код единственного класса реализации defaultoauth2accesstoken в Springsecurity в наш проект, а затем прочитать Byte [] через JDBC и восстановить объект DefaultOauth2accessToken через собственный механизм десериализации JDK. В настоящее время вы столкнетесь с проблемой, то есть оригинальный пакет OAuth2accessToken начинается с org.springframework.security, и после того, как мы скопируем исходный код, имя пакета начинается с пакета cn.com.xxxx, который мы определяем сами. Таким образом, при десериализации, даже если поля двух классов точно одинаковы, сбой десериализации будет вызвана различными полностью квалифицированными именами информации класса, хранящейся в байтовом потоке.
Решение
Мы можем определить подкласс, наследует объект jdk, а затем переопределить метод readclassdescriptor ():
@Override защищенный объект objectStreamClass readclassDescriptor () Throws ioException, classNotFoundException {objectStreamClass read = super.readClassDescriptor (); if (read.getName (). StartSwith ("negry Package name")) {class type = class.forname (read.getName (). "Заменить имя пакета"); ObjectStreamClass.lookup (type);} return Read;}Таким образом, не будет никаких ошибок при десериализации. Принцип не сложный. Фактически, при анализе байтового потока класс, который должен быть проанализирован как org.springframework.security.oauth2.common.defautoauthtoken, заменяется на cn.com.xxxxxx.defaultoAuthtoken, мы скопировали исходный код, чтобы достичь цели «децепции». В этом сценарии мы можем использовать службу авторизации SpringsecurityOauth2, не введя структуру Springsecurity в поставщике ресурсов. Поставщик ресурсов читает базу данных непосредственно для проверки достоверности токена, а не запросить авторизованную службу.
Суммировать
Выше приведено все содержание этой статьи о полноквалифицированном разрешении имени модифицированных классов во время десериализации JDK. Я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!