使用redis储存oauth2.0的token报错org.springframework.data.redis.connection.RedisConnection.set([B[B)V

         习惯于redis的高性能,搭建oauth2.0的时候,选择了使用redis作为token的储存空间,但使用springboot2.0以上版本的时候,出现了如下错误:

org.springframework.data.redis.connection.RedisConnection.set([B[B)V

          根据搜索出来的结果和GitHub上的讨论来看,是官方使用的springboot1.5版本的redis客户端管理之类的,不兼容2.0,但幸运的是高版本的oauth2.0已经兼容了springboot2.0以上版本。

          目前可靠的oauth2.0版本应该是:2.3.3.RELEASE。

          但我用的springboot版本,默认的oauth2.0还是未修复的版本,但大体架构的版本不能轻易改变,所以只能修改oauth2.0的版本。

        
            org.springframework.cloud
            spring-cloud-starter-oauth2
            2.3.3.RELEASE
       

          然而现实给了我一巴掌,行不通,这个jar包经过了springboot的进一步封装,版本号指的是springboot的。

          (这个时间点,springboot的最高版本应该是2.2.5左右,不算准确,但2.3往上的应该还没有)

          尝试改成高版本的springboot(高版本应该自带的是修复过的oauth2.0)

        
            org.springframework.cloud
            spring-cloud-starter-oauth2
            2.1.5.RELEASE//这里的版本号是springboot的
       

           根据maven的jar包库看,oauth2.0的版本已经是2.3.3.RELEASE了,到这一步应该是可以用了,但我心里还是有些不放心,因为我springboot的主版本是2.0的,oauth2.0使用2.1的版本,万一有什么冲突,线上就完蛋了。

           索性深入拆解下这个封装过的包,发现里面有两个jar

org.springframework.cloud:spring-cloud-starter-security:2.0.1.RELEASE
和
org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.0.1.RELEASE

            security就不用提了,下面这个包应该是oauth2.0的主体部分了,进一步拆解,里面好几个jar包,像boot、json、jwt之类的,最关键的是这个

org.springframework.security.oauth:spring-security-oauth2:2.2.1.RELEASE

            明显是oauth2.0的主体部分,2.2.1.RELEASE的版本,bug未修复(这个拆解的使用2.0的版本,不是2.1.5的boot),到这里就好办了,屏蔽掉这个低版本包,引入新版本就ok,由于嵌套了两层,我这里也分两次屏蔽。

        
            org.springframework.cloud
            spring-cloud-starter-oauth2
            
                
                    org.springframework.security.oauth.boot
                    spring-security-oauth2-autoconfigure
                
            
        

        
            org.springframework.security.oauth.boot
            spring-security-oauth2-autoconfigure
            
                
                    org.springframework.security.oauth
                    spring-security-oauth2
                
            
        

        
            org.springframework.security.oauth
            spring-security-oauth2
            2.3.3.RELEASE
        

            至此,成功运行。

            但后来想了下,exclusion能直接屏蔽掉内部jar,所以可以稍微优化下

        
            org.springframework.cloud
            spring-cloud-starter-oauth2
            
                
                    org.springframework.security.oauth
                    spring-security-oauth2
                
            
        

        
            org.springframework.security.oauth
            spring-security-oauth2
            2.3.3.RELEASE
        

 

你可能感兴趣的:(SpringCloud,java,互联网前沿技术)