SpringSecurityOAuth2

SpringSecurity升级Token序列化异常踩坑

2019-01-08  本文已影响0人  KingdomCoder

踩坑场景:

公司最近做技术架构的改造,并将原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

可以发现SimpleGrantedAuthorityserialVersionUID为401现在为500出现序列化兼容性问题。

排查过程:

通过检查spring-security-oauth2jar包依赖,当在SpringBoot为1.5.6版本时依赖的spring-security-corespring-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>
微信公众号欢迎关注.jpg
上一篇 下一篇

猜你喜欢

热点阅读