如何处理spring-security-oauth2的版本升级?

Jam*_*mes 14 java serialization spring spring-security spring-security-oauth2

spring-security-oauth2将Authentication对象作为序列化java对象(ByteArrayOutputStream.writeObject(authentication))保存在数据库中作为访问令牌条目的一部分.

你如何处理spring-security(可能会改变SpringSecurityCoreVersion.SERIAL_VERSION_UID)和spring-security-oauth(可能改变了serialVersionUID OAuth2Authentication)的版本升级?如果serialVersionUID发生更改,则无法再对反序列化持久化的Authentication对象.

我们得出的结论是,在升级框架版本时,删除包含序列化身份验证对象的访问令牌将是最干净,最简单的解决方案.任何想法如何更优雅地处理这个?

Ste*_*n C 2

我认为最好的解决办法就是扔掉代币。声明旁边有一条很大的评论,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.
 */
Run Code Online (Sandbox Code Playgroud)

事实上,他们SERIAL_VERSION_UID(至少)故意在每个小版本上进行碰撞。

( SEC-1709的问题评论解释了他们如何得出这个解决方案。)

我从评论中得到的是,如果您确实尝试透明地处理版本升级,则可能会导致事情破裂,并带来不可预测的后果。(这是可能存在安全问题的“代码”。)


另一方面,OAuth2Authentication.serialVersionUID过去9年似乎没有改变。