习惯于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