背景
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的实现类,类比旧方法。只能通过工厂类来创建
PasswordEncoderFactories.createDelegatingPasswordEncoder();
通过传入密码的特征码,动态去获取密码匹配器,这也就意味着保存在同一个库中密码可以使用多种加密方式。
{bcrypt}$2a$10$p0JC.ofpM8RxVTSubkKLDOUloGrQAX.lx/67HwnnyumATT69mwYm2
第一部分为加密方式的特征码,支持的类型如上图,第二部分为密文。 附上官方文档介绍: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_配合使用 客户端:
<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/ - 关于pig:基于Spring Cloud、oAuth2.0开发基于Vue前后分离的开发平台,支持账号、短信、SSO等多种登录,提供配套视频开发教程
- 求求你别更新了,学不完了!