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

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

内容简介: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 发布,优雅实现密钥交换加解密》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

Data Structures and Algorithm Analysis in Java

Data Structures and Algorithm Analysis in Java

Mark A. Weiss / Pearson / 2011-11-18 / GBP 129.99

Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course wa......一起来看看 《Data Structures and Algorithm Analysis in Java》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

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

HEX CMYK 互转工具