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

时间:2014-12-10 11:14:39

标签: java spring serialization spring-security spring-security-oauth2

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

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

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

1 个答案:

答案 0 :(得分: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的问题注释说明了他们如何解决此问题的。)

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


另一方面,OAuth2Authentication.serialVersionUID在最近9年中似乎没有变化。