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

背景

6.19号,spring团队发布了期待已久的 Spring Cloud Finchley.RELEASE 版本。 重要变化:git

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

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

目标

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

关于pig:

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

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

版本变化

+------------------+
                 |                  |
                 |  1.5.12.RELEASE  |
                 |                  |
                 +--------+---------+
                          |
Spring Boot               |
                          v

                 +------------------+
                 |                  |
                 |  2.0.3.RELEASE   |
                 |                  |
                 +------------------+

复制代码
+------------------+
                 |                  |
                 |  Edgware.SR3     |
                 |                  |
                 +--------+---------+
                          |
Srping Cloud              |
                          v

                 +------------------+
                 |                  |
                 |  Finchley.RELEASE|
                 |                  |
                 +------------------+

复制代码

问题总结

PasswordEncoder 变化

直接使用原有代码报错:bash

passwordencoder mapped for the id null
复制代码
// 旧
@Bean
public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
}
 
// 新
@Bean
public PasswordEncoder passwordEncoder() {
    return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}

复制代码

在 Finchley 版本中, 出于安全性的缘由,修改了PasswordEncoder 的生成和使用方法。
在注入bean 的时候不能显示指定PasswordEncoder的实现类,类比旧方法。只能经过工厂类来建立 app

image

PasswordEncoderFactories.createDelegatingPasswordEncoder();
复制代码

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

{bcrypt}$2a$10$p0JC.ofpM8RxVTSubkKLDOUloGrQAX.lx/67HwnnyumATT69mwYm2
复制代码

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

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

RedisTokenStore bug

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

NoSuchMethodError.RedisConnection.set([B[B)V #16
复制代码

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

<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版本

写在最后

相关文章
相关标签/搜索