踩坑场景:
公司最近做技术架构的改造,并将原SpringBoot1.5.6版本升级为2.0.6,并逐渐将内部服务调用dubbo协议逐渐转换为SpringCloud的Feign调用,前期主要对SpringBoot版本进行升级。
通过
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
自动维护SpringBoot引用版本依赖加载。我们之前采用数据库的方式记录token的方式,原SpringSecurityOauth引用版本同样为2.0.14.RELEASE
但是原低版本生成的token在反序列化时出现兼容性问题。
java.lang.IllegalArgumentException:
java.io.InvalidClassException: org.springframework.security.core.authority.SimpleGrantedAuthority;
local class incompatible: stream classdesc serialVersionUID = 420, local class serialVersionUID = 500
可以发现SimpleGrantedAuthority
的serialVersionUID
为401现在为500出现序列化兼容性问题。
排查过程:
通过检查spring-security-oauth2
jar包依赖,当在SpringBoot为1.5.6版本时依赖的spring-security-core
和spring-security-config
为4.2.3版本。当升级为2.0.6版本依赖版本为5.0.9版本。
5.0.9版本SimpleGrantedAuthority
源码的serialVersionUID=500
,4.2.3版本下serialVersionUID=420
导致反序列化对象时为null
。
<dependency>
<groupId>org.springframework.security.oauth</groupId>
<artifactId>spring-security-oauth2</artifactId>
<version>2.0.14.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
解决方案:
为了兼容低版本的token问题,所以针对性的对security的版本降级。
排除spring-security-oauth2
自动依赖,自定义加载依赖4.2.3.RELEASE
<dependency>
<groupId>org.springframework.security.oauth</groupId>
<artifactId>spring-security-oauth2</artifactId>
<version>2.0.14.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>4.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>4.2.3.RELEASE</version>
</dependency>