Как обрабатывать обновления версии spring -security-oauth2?

spring -security-oauth2 сохраняет объект Authentication как часть записи токена доступа в базе данных в виде сериализованного java-объекта (ByteArrayOutputStream.writeObject(authentication)).

Как вы обрабатываете обновления версий либо spring -security (что может изменить SpringSecurityCoreVersion.SERIAL_VERSION_UID) и spring -security-oauth (что может изменить serialVersionUID OAuth2Authentication)? Если serialVersionUID изменился, объект с сохраненной аутентификацией больше не может быть десериализован.

Мы приходим к выводу, что удаление токенов доступа, содержащих сериализованные объекты аутентификации, было бы самым простым и простым решением при обновлении версии фреймворка. Любые идеи, как справиться с этим более изящно?

Ответ 1

Я думаю, что лучшее решение - выбросить токены. Рядом с выражением SpringSecurityCoreVersion.SERIAL_VERSION_UID есть большой комментарий, который гласит:

/**
 * Global Serialization value for Spring Security classes.
 *
 * N.B. Classes are not intended to be serializable between different versions. See
 * SEC-1709 for why we still need a serial version.
 */

Действительно, они сознательно бьют SERIAL_VERSION_UID (по крайней мере) при каждом незначительном выпуске.

(Комментарии к проблеме для SEC-1709 объясняют, как они пришли к этому решению.)

Из комментариев я понял, что если вы действительно пытались прозрачно обрабатывать обновление версии, это может привести к поломке, что может привести к непредсказуемым последствиям. (Это "код" для возможных проблем безопасности.)


С другой стороны, OAuth2Authentication.serialVersionUID, похоже, не изменился за последние 9 лет.