oAuth2 升级Spring Cloud Finchley.RELEASE踩坑分享 .md

背景

6.19号,spring团队发布了期待已久的 Spring Cloud Finchley.RELEASE 版本。

重要变化:

  • 基于Spring Boot 2.0.X
  • 不兼容 Spring Boot 1.5.X

期间踩过几个坑,分享出来给大伙,主要是关于 **Spring Cloud oAuth** 部分

目标

基于现有Spring Cloud 脚手架**pig**开始动手升级。

关于pig:

基于Spring Cloud、oAuth2.0开发基于Vue前后分离的开发平台,支持账号、短信、SSO等多种登录,提供配套视频开发教程。

码云地址:https://gitee.com/log4j/pig

版本变化

                 +------------------+

                 |                  |

                 |  1.5.12.RELEASE  |

                 |                  |

                 +--------+---------+

                          |

Spring Boot               |

                          v



                 +------------------+

                 |                  |

                 |  2.0.3.RELEASE   |

                 |                  |

                 +------------------+
                 +------------------+

                 |                  |

                 |  Edgware.SR3     |

                 |                  |

                 +--------+---------+

                          |

Srping Cloud              |

                          v



                 +------------------+

                 |                  |

                 |  Finchley.RELEASE|

                 |                  |

                 +------------------+

问题总结

PasswordEncoder 变化

直接使用原有代码报错:

passwordencoder mapped for the id null
// 旧

@Bean

public PasswordEncoder passwordEncoder() {

    return new BCryptPasswordEncoder();

}

 

// 新

@Bean

public PasswordEncoder passwordEncoder() {

    return PasswordEncoderFactories.createDelegatingPasswordEncoder();

}

在 Finchley 版本中, 出于安全性的原因,修改了PasswordEncoder 的生成和使用方法。

在注入bean 的时候不能显示指定**PasswordEncoder**的实现类,类比旧方法。只能通过工厂类来创建

image
PasswordEncoderFactories.createDelegatingPasswordEncoder();
image

通过传入密码的特征码,动态去获取密码匹配器,这也就意味着保存在同一个库中密码可以使用多种加密方式。

{bcrypt}$2a$10$p0JC.ofpM8RxVTSubkKLDOUloGrQAX.lx/67HwnnyumATT69mwYm2

第一部分为加密方式的特征码,支持的类型如上图,第二部分为密文。

image

附上官方文档介绍:https://spring.io/blog/2017/11/01/spring-security-5-0-0-rc1-released#password-storage-updated

RedisTokenStore bug

当授权Auth-Server 配置token 保存在redis 时,报了下面的错误。

NoSuchMethodError.RedisConnection.set([B[B)V #16

Finchley.RELEASE 依赖的版本为 2.2.X版本。

<dependency>

    <groupId>org.springframework.security.oauth</groupId>

    <artifactId>spring-security-oauth2</artifactId>

    <version>2.2.X</version>

</dependency>

升级到 2.3.3版本即可解决Redis操作问题

<!--spring security 、oauth、jwt依赖-->

<dependency>

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-security</artifactId>

    <exclusions>

        <!--旧版本 redis操作有问题-->

        <exclusion>

            <artifactId>spring-security-oauth2</artifactId>

            <groupId>org.springframework.security.oauth</groupId>

        </exclusion>

    </exclusions>

</dependency>



<dependency>

    <groupId>org.springframework.security.oauth</groupId>

    <artifactId>spring-security-oauth2</artifactId>

    <version>2.3.3.RELEASE</version>

</dependency>

Spring Boot Admin 2.0.1

Spring Boot Admin 监控组件也发布了

兼容Finchley.RELEASE的 2.0.1版本,相较之前版本不同,当前版本需要和***spring security***配合使用

客户端:

image
image
<dependency>

    <groupId>de.codecentric</groupId>

    <artifactId>spring-boot-admin-starter-client</artifactId>

    <version>2.0.1</version>

</dependency>

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-security</artifactId>

</dependency>
/\*\*

 \* @author lengleng

 \* @date 2018/6/22

 \* 针对监控模块。全部放行

 \*/

@Configuration

public class SecurityPermitAllConfig extends WebSecurityConfigurerAdapter {

    @Override

    protected void configure(HttpSecurity http) throws Exception {

        http.authorizeRequests().anyRequest().permitAll()

            .and().csrf().disable();

    }

}

详细使用我会再分享一篇关于 spring boot admin 2.0.X版本

写在最后

  • 其他的升级步骤还挺顺风顺水,多看一下官方的文档即可。

http://cloud.spring.io/spring-cloud-static/Finchley.RELEASE/

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码神联盟

Spring Boot 入门篇---概念与hello word

Spring Boot是什么? 百度全科如此定义:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以...

3797
来自专栏JAVA同学会

Spring Security实现RBAC权限管理

在企业应用中,认证和授权是非常重要的一部分内容,业界最出名的两个框架就是大名鼎鼎的

4432
来自专栏Ryan Miao

SpringCloud2.0入门3-新的eureka依赖

Springboot2.0推出有一段时间了,是要学习1.5+还是从2.0开始?犹豫的原因是资料不全,目前现有的资料大部分是1.0的。但作为学习者,肯定要学习最新...

1001
来自专栏电光石火

spring 在Thread中注入@Resource失败,总为null的解决方案

@Resource private MyMapper myDao; 但是运行的时候,进入到这个线程,这个myDao总为nul...

5777
来自专栏冷冷

基于Spring Cloud 少量配置完成单点登录开发

单点登录概念 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登...

5536
来自专栏流柯技术学院

linux下安装rzsz

wget http://freeware.sgi.com/source/rzsz/rzsz-3.48.tar.gz

2921
来自专栏一个会写诗的程序员的博客

第11章 Spring Boot应用监控第11章 Spring Boot应用监控小结

在实际的生产系统中,我们怎样知道我们的应用运行良好呢?我们往往需要对系统实际运行的情况(各种cpu,io,disk,db,业务功能等指标)进行监控运维。这需要耗...

2353
来自专栏大数据和云计算技术

Flume日志收集系统架构详解

任何一个生产系统在运行过程中都会产生大量的日志,日志往往隐藏了很多有价值的信息。在没有分析方法之前,这些日志存储一段时间后就会被清理。随着技术的发展和分析能力的...

4518
来自专栏冷冷

基于Spring Cloud 几行配置完成单点登录开发

单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访...

2169
来自专栏Java帮帮-微信公众号-技术文章全总结

Spring-拾遗

Junit集成 前面多次用到@RunWith与@ContextConfiguration,在测试类添加这两个注解,程序就会自动加载spring配置并初始化Spr...

2945

扫码关注云+社区