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 条评论
登录 后参与评论

相关文章

来自专栏程序猿DD

从零开始的Spring Security Oauth2(一)

前言 今天来聊聊一个接口对接的场景,A厂家有一套HTTP接口需要提供给B厂家使用,由于是外网环境,所以需要有一套安全机制保障,这个时候oauth2就可以作为一个...

3156
来自专栏JadePeng的技术博客

Docker+Jenkins持续集成环境(5): android构建与apk发布

项目组除了常规的java项目,还有不少android项目,如何使用jenkins来实现自动构建呢?本文会介绍安卓项目通过jenkins构建的方法,并设计开发一个...

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

《Kotlin极简教程》第2章 快速开始:HelloWorld

我们在本章将介绍使用Kotlin程序设计语言,分别使用命令行、应用程序、Web RESTFul、Android、Kotlin JavaScript等方式向世界问...

713
来自专栏java闲聊

jdk10与springboot2.1.0尝鲜

1953
来自专栏菩提树下的杨过

Spring官网下载dist.zip的几种方法

Spring官网改版后,很多项目的完整zip包下载链接已经隐掉了,虽然Spring旨在引导大家用更“高大上”的maven方式来管理所依赖的jar包,但是完全没想...

1727
来自专栏IT笔记

SpringBoot开发案例之奇技淫巧

程序员都有着一种天生的好奇心,这种好奇心引导着我们的编程生涯。写几行代码,装载到计算机里,让它按照你的思路工作,这是非常有趣的事情。但随着开发的东西越来越多,我...

55810
来自专栏菩提树下的杨过

jboss eap 6.3 集群(cluster)-Session 复制(Replication)

本文算是前一篇的后续,java web application中,难免会用到session,集群环境中apache会将http请求智能转发到其中某台jboss ...

2557
来自专栏程序猿DD

从零开始的Spring Session(三)

新媒体管家 上一篇文章中,我们使用Redis集成了Spring Session。大多数的配置都是Spring Boot帮我们自动配置的,这一节我们介绍一点Spr...

2558
来自专栏程序猿DD

Spring Cloud Zuul中使用Swagger汇总API接口文档

之前给大家的回复都只是简单的说了个思路,昨天正好又有人问起,索性就举个例子写成博文供大家参考吧。

934
来自专栏冷冷

oauth2.0 实现spring cloud nosession

上一篇博客使用自定义jwt实现spring cloud nosession,过程稍微比较复杂,依赖的是我们自己控制token生成、校验。 那么这一篇文章将使用...

33810

扫码关注云+社区