Spring Boot 增强库 yue-library 2.3.2 发布,优雅实现密钥交换加解密

栏目: 软件资讯 · 发布时间: 3年前

内容简介:yue-library简介 yue-library是一个基于SpringBoot封装的增强库 内置丰富的JDK工具 自动装配了一系列的基础Bean与环境配置项 快速构建SpringCloud项目,让微服务变得更简单 版本更新日志 此版本重点实现:密钥交换...

Spring Boot 增强库 yue-library 2.3.2 发布,优雅实现密钥交换加解密

yue-library简介

yue-library是一个基于SpringBoot封装的增强库

  • 内置丰富的JDK工具
  • 自动装配了一系列的基础Bean与环境配置项
  • 快速构建SpringCloud项目,让微服务变得更简单

版本更新日志

此版本重点实现:密钥交换加解密增强Bean转换能力JDBC新增Elasticsearch-SQL、达梦、PostgreSQL方言

新特性

  • 【base】ParamUtils提示优化,添加错误原因
  • 【base】添加JSONListConverter类型转换器从而支持List<JSONObject>类型处理(JDBC实体数据库查询映射时JSONArray格式文本数据不支持映射成List<JSONObject>
  • 【base】优化fastjson bean转换的jsonstr识别方式
  • 【base】增强DateUtils与规范UUID工具类为IdUtils并优化IdUtils实现
  • 【base】增强fastjson JavaBean转换能力,支持Character类型
  • 【base】MapUtils增强值提取,支持list根据key提取map提取值支持map、fastjson pulls !17
  • 【crypto】新增重磅特性-密钥交换加密:支持@RequestDecrypt注解实现请求自动解密
  • 【crypto】新增重磅特性-密钥交换加密:支持@ResponseEncrypt注解实现响应内容加密
  • 【crypto】密钥交换加密:默认提供本地Map与 Redis 两种交换密钥存储方案
  • 【crypto】密钥交换加密:@RequestDecrypt@ResponseEncrypt注解支持使用交换密钥加密或自定义密钥等特性
  • 【web】修复ApiVersion注解minimumVersion值等于的情况下410
  • 【web】优化响应结果处理器在标准HTTP状态码时的空值处理
  • 【web】新增ServletUtils.getAuthToken()方法,获取请求中的OAuth2 Token
  • 【webflux】修复ApiVersion注解minimumVersion值等于的情况下410
  • 【jdbc】对jdbc方言实现进行完善与优化,新增Elasticsearch-SQL、达梦、PostgreSQL方言
  • 【jdbc】db.queryForObject 自动识别Bean类型与简单类型
  • 【jdbc】参数美化增强支持JSONArray数据类型与List<JSONObject>数据类型
  • 【jdbc】优化多行查询结果转换为单行查询结果实现
  • 【jdbc】所有mappedClass查询方法自动识别所需RowMapper类型,实现JavaBean、map、基本类型结果自动匹配
  • 【jdbc】规范内部部分常量命名与移除分页中不优雅的泛型实例PageTVO
  • 【jdbc】增强自动方言识别,根据驱动类自动识别所需方言类型
  • 【jdbc】默认Db Bean实现根据不同驱动类型,使用对应方言配置
  • 【jdbc】优化DAO实现,抽象基础DAO
  • 【jdbc】优化所有jdbc方法注释,描述更简洁,表达更清晰,注释更规范
  • 【jdbc】删除早期存在的部分过时方法
  • 【es】支持配置ConnectTimeout与SocketTimeout,并调大各自默认值为25与15秒

Bug修复

  • 【base】修复fastjson JavaBean转换BUG #3688
  • 【jdbc】修复isDataSize()方法可能因为数据库存在多行数据,而返回false的隐患
  • 【jdbc】修复因错误测试而删除的参数类型美化(现已支持:Character、JSONObject、LocalDateTime进行特殊转换处理与布尔值映射识别)

Maven仓库实际发布版本号

j8.2.3.2j11.2.3.2

关键pom.xml依赖:

依赖 版本
spring-boot 2.3.8.RELEASE
spring-cloud Hoxton.SR10
spring-cloud-alibaba 2.2.5.RELEASE
hutool 5.6.3
fastjson 1.2.76

工程结构

. yue-library
├── yue-library  基础库
│   ├── yue-library-dependencies  父pom
│   ├── yue-library-base          基础库提供了丰富的 Java 工具包,同时也自动装配了一系列基础Bean等
│   ├── yue-library-base-crypto   基于Hutool实现的加解密模块,提供诸如数据脱敏此类的更多特性
│   ├── yue-library-web           基础库WebMvc实现,用于servlet项目
│   ├── yue-library-webflux       基础库WebFlux实现,用于响应式编程项目(如:SpringCloudGateway)
│   ├── yue-library-data-jdbc     基于SpringJDBC进行二次封装,拥有着强大性能的同时又不失简单、灵活等
│   ├── yue-library-data-redis    基于SpringRedis进行二次封装,更简单灵活,提供全局token与登录相关特性等
│   ├── yue-library-auth-service  基于SpringSecurity进行二次封装,更简单灵活,提供全局token与登录等特性
│   ├── yue-library-auth-client   auth-client为auth-service客户端模块,提供获取当前登录用户状态信息等特性
│   ├── yue-library-pay           基于pay-java-parent进行二次封装,让你真正做到一行代码实现支付聚合
│   ├── yue-library-cloud-oss
│   └── yue-library-cloud-sms
├── yue-library-samples  基础库示例
│   ├── yue-library-test		yue-library代码测试项目:单元测试、接口测试、代码示例
│   ├── yue-library-test-webflux	yue-library-webflux代码测试项目:单元测试、接口测试、代码示例
│   ├── yue-library-template-simple	yue-library模版:SpringBoot项目模版
│   └── yue-library-template-ssc	yue-library模版:SpringCloud项目模版,SOA共享架构(阿里巴巴中台)
└── yue

快速开始

引入项目依赖

maven项目,在pom.xml文件中添加如下一段代码,并将${version}替换为对应版本号:Spring Boot 增强库 yue-library 2.3.2 发布,优雅实现密钥交换加解密

<parent>
	<groupId>ai.ylyue</groupId>
	<artifactId>yue-library-dependencies</artifactId>
	<version>${version}</version>
</parent>

随后引入所需要的模块,如WebMvc项目引入:yue-library-web

依赖说明:yue-library-base为基础模块,一般情况下不需要单独引入,如:web、data-jdbc、data-redis等模块皆已默认依赖。

<dependencies>
	<dependency>
		<groupId>ai.ylyue</groupId>
		<artifactId>yue-library-web</artifactId>
	</dependency>
	...
</dependencies>

启动项目

新建一个SpringBoot main方法启动类:

@SpringBootApplication
public class TestApplication {

	public static void main(String[] args) throws Exception {
		SpringApplication.run(TestApplication.class, args);
	}

}

写一个测试接口:

@RestController
@RequestMapping("/quickstart")
public class QuickstartController {

	@GetMapping("/get")
	public Result<?> get(JSONObject paramJson) {
		return ResultInfo.success(paramJson);
	}
	
}

访问接口测试,如:http://localhost:8080/quickstart/get

{
    "code": 200,
    "msg": "成功",
    "flag": true,
    "count": null,
    "data": {}
}

密钥交换

密钥交换加密可以实现如下几个特性:

  • 每次会话的密钥时随机的,客户端与服务端事先无需约定
  • 密钥未直接存储在客户端与服务端中,避免了泄露风险
  • 密钥交换过程中,密钥的传输是加密的

密钥交换流程

Spring Boot 增强库 yue-library 2.3.2 发布,优雅实现密钥交换加解密

密钥交换步骤一:客户端请求传输加密公钥

  1. 客户端使用密钥存储key,请求获得服务端公钥(用于步骤二请求加密)
  • 密钥存储key:作为会话唯一键,在步骤一、步骤二、步骤三中属于必填参数
  • 密钥存储key:在用户未登录时一般会随机生成一个UUID,用户登陆后再用token作为别名
  • 密钥存储key:用户已登录情况,一般会以用户本次会话token作为存储key
  1. 服务端收到请求后,生成用于后续传输加解密的公私钥并绑定存储key
  2. 服务端将生成的公钥返回给客户端

密钥交换步骤二:客户端请求最终交换密钥

  1. 客户端获得服务端的公钥后,创建客户端自身的公私钥
  2. 客户端使用服务端的公钥加密自身生成的公钥,向服务端请求最终的交换密钥
  3. 服务端使用私钥解密获得客户端公钥
  4. 服务端生成最终交换密钥,并使用客户端公钥进行响应加密
  5. 客户端获得加密的交换密钥后使用客户端私钥解密,获得交换密钥

密钥交换步骤三(可选):客户端为服务端密钥的存储key添加别名

  • 适用场景:
  • 步骤一时用户未登录,使用临时的UUID作为服务端密钥存储key,用户登录后想使用token作为密钥存储key,方便后续传输

使用交换密钥加解密

  1. 客户端获得交换密钥后,请求需要参数加密的接口时,以约定的方式带上密钥存储key,并加密请求参数
  • 约定方式:默认为OAuth2 Token认证,故:若步骤一使用UUID作为存储key,需将token添加为存储别名
  • 约定方式:除默认方式外支持:Header传参约定、URL Param传参约定(具体传参key为服务端定义,默认key值:Yue-ExchangeKey-StorageKey
  1. 服务端解密参数处理业务逻辑后,使用@ResponseEncrypt注解自动加密响应的data参数
  2. 客户端解密响应结果

接口说明

默认算法名称

  • RSA_AES:
	/** RSA算法,此算法用了默认补位方式为RSA/ECB/PKCS1Padding */
	RSA_ECB_PKCS1("RSA/ECB/PKCS1Padding"), 

	/** 默认的AES加密方式:AES/ECB/PKCS5Padding */
	AES("AES"), 
  • SM2_SM4
	/**
	 * 算法EC
	 */
	private static final String ALGORITHM_SM2 = "SM2";
	
	public static final String ALGORITHM_NAME = "SM4";

密钥交换-第一步:获得加密公钥

接口地址:POST /open/v2.3/keyExchange/{storageKey}

参数 说明 参数示例
storageKey RESTful路径参数,密钥存储key 23ef1f9418e84cc884187e1720ac1529
exchangeKeyType 交换密钥类型,枚举值:RSA_AES、SM2_SM4 RSA_AES

密钥交换-第二步:获得交换密钥

接口地址:POST /open/v2.3/keyExchange/{storageKey}

参数 说明 参数示例
storageKey RESTful路径参数,密钥存储key 23ef1f9418e84cc884187e1720ac1529
exchangeKeyType 交换密钥类型,枚举值:RSA_AES、SM2_SM4 RSA_AES
encryptedClientPublicKey 使用服务端公钥加密的客户端公钥(encryptBase64) SsowXMaZfQiec39 ..略n.. uv/DbVr6gslrjY3Q==

密钥交换-第三步:添加存储key别名

接口地址:POST /open/v2.3/keyExchange/{storageKey}/addAlias

参数 说明 参数示例
storageKey RESTful路径参数,密钥存储key 23ef1f9418e84cc884187e1720ac1529
storageKeyAlias 存储别名 cbf55767c47e4d4e9feb90cfa2bdf5aa

配置

yue: 
  crypto:
    key-exchange:
      enabled: true # 默认false,启用密钥交换
      key-exchange-storage-type: redis # 使用redis作为密钥交换存储类型

注解使用说明

@RequestDecrypt请求解密注解:

  • 必须与@RequestBody注解一同使用
  • @RequestBody注解只支持使用Body传参,并映射为实体参数。
  • Content-Type=application/json;charset=UTF-8
    @RequestDecrypt
    @PostMapping("/decrypt")
    public Result<?> decrypt(@RequestBody UserIPO userIPO) {
        return R.success(userIPO);
    }

@ResponseEncrypt响应加密注解:

  • 必须与@ResponseBody注解一同使用,@RestController注解默认已集成@ResponseBody
  • 必须使用Result作为返回类型,并且加密的是data参数
    @ResponseEncrypt
    @GetMapping("/{encrypt}")
    public Result<?> encrypt(@PathVariable String encrypt) {
        return R.success(encrypt);
    }

收藏一波以表支持吧(≧▽≦)/!


以上所述就是小编给大家介绍的《Spring Boot 增强库 yue-library 2.3.2 发布,优雅实现密钥交换加解密》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

领域特定语言

领域特定语言

Martin Fowler / ThoughtWorks中国 / 机械工业出版社华章公司 / 2013-3 / 89.00元

本书是DSL领域的丰碑之作,由世界级软件开发大师和软件开发“教父”Martin Fowler历时多年写作而成,ThoughtWorks中国翻译。全面详尽地讲解了各种DSL及其构造方式,揭示了与编程语言无关的通用原则和模式,阐释了如何通过DSL有效提高开发人员的生产力以及增进与领域专家的有效沟通,能为开发人员选择和使用DSL提供有效的决策依据和指导方法。 全书共57章,分为六个部分:第一部分介......一起来看看 《领域特定语言》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具