做了个springboot接口参数解密的工具,我给它命名为万能钥匙(已上传maven中央仓库,附详细使用说明)
前言:之前工作中做过两个功能,就是之前写的这两篇博客,最近几天有个想法,给它做成一个springboot的start启动器,直接引入依赖,写好配置就能用了
springboot使用自定义注解实现接口参数解密,普通字段,json,集合
使用反射实现@RequestBody的参数校验功能
现在,它来了。
项目地址:
gitee:https://gitee.com/vhukze/master-key
github:https://github.com/vhukze/master-key
目录
介绍
软件架构
配置教程
1.引入依赖
2.配置
3.注意事项
使用说明
不同传参方式示例
不同参数类型示例
validation模块注解校验
最后
介绍
用来实现接口参数解密的工具,只需引入依赖,在配置文件写明加密的配置,在接口上使用指定注解即可实现该接口的参数解密。并支持使用validation模块的注解进行参数校验,支持分组校验功能
支持的对称加密方式:SM4,AES,DES,DESede 支持的非对称加密方式:RSA,SM2
软件架构
使用java8,springboot2.x.x,一个简单的springboot starter 启动器,功能中用到的工具类是hutool
配置教程
1.引入依赖
<dependency><groupId>io.github.vhukze</groupId><artifactId>master-key-spring-boot-starter</artifactId><version>目前最新版本</version></dependency>
2.配置
注册参数解析器
import com.vhukze.masterkey.master.DecodeResolver;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import javax.annotation.Resource;
import java.util.List;/*** webmvc配置*/
@Configuration
public class MasterKeyConfig implements WebMvcConfigurer {@Resourceprivate DecodeResolver decodeResolver;/*** 注册自定义HandlerMethodArgumentResolver 接口参数解密*/@Overridepublic void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {resolvers.add(decodeResolver);}
}
对称加密配置示例(配置到application.yml中)
master-key:# 加密方式encode: SM4# 使用json格式参数时,解密之前json的key 不配置此参数则代表使用text格式参数,只传递加密后的字符串json-key: str# 加密模式mode: CBC# 填充方式padding: ISO10126Padding# 秘钥key: 1234123412ABCDEF# 盐值salt: ABCDEF1234123412
对称加密配置项的可配置值
| 加密方式(encode) | 加密模式(mode) | 填充方式(padding) |
|---|---|---|
| SM4 | NONE | NoPadding |
| AES | CBC | ZeroPadding |
| DES | CFB | ISO10126Padding |
| DESede | CTR | OAEPPadding |
| CTS | PKCS1Padding | |
| ECB | PKCS5Padding | |
| OFB | SSL3Padding | |
| PCBC |
非对称加密配置示例
master-key:# 加密方式encode: SM2# 使用json格式参数时,解密之前json的key 不配置此参数则代表使用text格式参数,只传递加密后的字符串json-key:# 公钥public-key: MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEDRhJQbkA5SKceAaJmtdOBiRzCqwei4WRzAkBrZ9SkBZhZ1zC4nteRLVi754MsI/8vsiNK2lV518E8RaNw+mnLA==# 私钥private-key: MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQ
3.注意事项
使用SM4和SM2国密加密算法时,需要引入国密加密的依赖 如下
<dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15to18</artifactId><version>1.69</version></dependency>
使用说明
支持自定义实体类、基础数据类型及其包装类、集合类型、map类型。加密前参数格式跟正常请求接口时相同
不同传参方式示例
例如当前接口所需参数为:{"id":1,"count":4}
加密后为:c7dc378bf0c4da001466818765813a506b1a6b37e960b7ca
1.json格式传参
在配置文件配置好json-key,并使用配置的json-key构建json字符串,比如配置的json-key为str,json字符串如下
{"str":"c7dc378bf0c4da001466818765813a506b1a6b37e960b7ca"
}
实际请求如下图

2.text格式传参
不配置json-key即为使用text格式传参
实际请求如下图

不同参数类型示例
使用text传参方式演示
接口使用@ParamsDecode注解,标明此接口需要参数解密,如下
@ParamsDecode
@PostMapping("decode")
public String decode(Stock stock){return "";
}
1.自定义实体类
接口参数的实体类
@Data
public class Stock {private Integer id;private Integer count;
}
加密前的请求参数: {"id":1,"count":4}
实际请求

接口接收到的参数

2.基础数据类型或其包装类
接口参数为一个int类型
加密前的请求参数:5
实际请求

接口接收到的参数

3.集合类型
接口参数为List<Integer>集合
加密前的请求参数:[1,2,3]
实际请求

接口接收到的参数

validation模块注解校验
实现了一些常用的注解,并支持分组校验功能,目前实现的注解有以下这些
| 数据类型 | 注解 |
|---|---|
| Integer、Long、Short | @NotNull、@Max、@Min、@Null |
| String | @NotNull、@NotBlank、@Size、@Null、@Pattern |
| 集合类型 | @NotNull、@NotEmpty、@Size、@Null |
具体使用方式跟正常使用一样,下面有个示例
@Data
public class Stock {@Max(3)@NotNull(groups = Edit.class)private Integer id;@NotBlank(groups = {Add.class, Edit.class})private String name;@Min(3)private Integer count;public interface Add {}public interface Edit {}
}
@ParamsDecode
@PostMapping("decode")
public String decode(@Validated(value = Add.class) Stock stock) {return "";
}
最后
目前就有这些功能,后面如果有需要的话,准备加入接口返回数据加密功能、Map类型参数的解密、不同接口使用不同解密方式等功能
相关文章:
做了个springboot接口参数解密的工具,我给它命名为万能钥匙(已上传maven中央仓库,附详细使用说明)
前言:之前工作中做过两个功能,就是之前写的这两篇博客,最近几天有个想法,给它做成一个springboot的start启动器,直接引入依赖,写好配置就能用了 springboot使用自定义注解实现接口参数解密,普通…...
【Flutter从入门到入坑】Flutter 知识体系
学习 Flutter 需要掌握哪些知识? 终端设备越来越碎片化,需要支持的操作系统越来越多,从研发效率和维护成本综合考虑,跨平台开发一定是未来大前端的趋势,我们应该拥抱变化。而 Flutter 提供了一套彻底的移动跨平台方案…...
顺序表的基本操作
目录 一.什么是顺序表 二.顺序表的基本操作 1.初始化 2.增容 3.尾插 4.头插 5.尾删 6.头删 7.指定位置插入 8.指定位置删除 9.打印 10.查找 11.销毁 一.什么是顺序表 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组…...
设计模式——创建型模型——单列模式(8种实现)
前言: 👏作者简介:我是笑霸final,一名热爱技术的在校学生。 📝个人主页:个人主页1 || 笑霸final的主页2 📕系列专栏:计算机基础专栏 📧如果文章知识点有错误的地方&#…...
【软考中级】软件设计师笔记
计算机系统的性能一般包括两个方面:一方面是它的可用性,也就是计算机系统能正常工作的时间,其指标可以是能够持续工作的时间长度,也可以是在一段时间内,能正常工作的时间所占的百分比 另一方面是处理能力,又…...
包教包会的ES6
自学参考:http://es6.ruanyifeng.com/ 一、ECMAScript 6 简介 ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大…...
python学习——【第四弹】
前言 上一篇文章 python学习——【第三弹】 中学习了python中的流程控制语句,这篇文章我们接着学习python中的序列。先给大家介绍不可变序列 字符串和可变序列 列表,下一篇文章接着补充元组,集合和字典。 序列 指的是一块可以存放多个值的…...
Web3中文|无聊猿Otherside元宇宙启动第二次旅行
3月9日消息,无聊猿Bored Ape Yacht Club母公司Yuga Labs公布了其Otherside元宇宙游戏平台第二次测试的最新细节。Yuga Labs公司称,“第二次旅行”将于3月25日举行,由四位Otherside团队长带领完成近两小时的游戏故事。本次旅行对Otherdeed NFT…...
SpringCloud-7_OpenFeign服务调用
OpenFeign介绍OpenFeign是什么1.OpenFeign是个声明式WebService客户端,使用OpenFeign让编写Web Service客户端更简单2.它的使用方法是定义一个服务接口然后在上面添加注解3.OpenFeign也支持可拔插式的编码器和解码器4.Spring Cloud对OpenFeign进行了封装使其支持了S…...
解决docker容器之间网络互通
docker容器之间相互访问 1.查看当前的网络 Copy [roothost ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 3dd4643bb158 bridge bridge local 748b765aca52 host host …...
测试微服务:快速入门指南
在过去几年中,应用程序已经发展到拥有数百万用户并产生大量数据。使用这些应用程序的人期望快速响应和 24/7 可用性。为了使应用程序快速可用,它们必须快速响应增加的负载。 一种方法是使用微服务架构,因为在单体应用程序中,主要…...
MySQL Show Profile分析
6 Show Profile分析(重点) Show Profile是mysql提供可以用来分析当前会话中语句执行的资源消耗情况。可以用于SQL的调优的测量 官网文档 默认情况下,参数处于关闭状态,并保存最近15次的运行结果 分析步骤: 1、是否…...
基于Docker快速搭建蜜罐Dionaea(30)
实验目的 1. 快速搭建Dionaea蜜罐 2. 使用Nmap扫描测试Dionaea蜜罐预备知识1. 初步认识Dionaea dionaea,中文的意思即捕蝇草,是否形容蜜罐很形象?dionaea是nepenthes(猪笼草)的发展和后续,更加容易被部署和…...
WP_Query 的所有参数及其讲解和实用案例
WP_Query 是 WordPress 提供的一个强大的查询工具,用于获取与当前页面或文章相关的内容。下面是 WP_Query 的所有参数及其讲解:author: 查询特定作者的文章。可以是作者 ID、作者登录名或作者昵称。实用案例:查询作者为 "John Smith&quo…...
100个网络运维工作者必须知道的小知识!(上)
1)什么是链接? 链接是指两个设备之间的连接。它包括用于一个设备能够与另一个设备通信的电缆类型和协议。 2)OSI参考模型的层次是什么? 有7个OSI层:物理层,数据链路层,网络层,传输…...
Python如何获取大量电影影评,做可视化演示
前言 《保你平安》今天上映诶,有朋友看过吗,咋样啊 这是我最近比较想看的电影了,不过不知道这影评怎么样,上周末的点映应该是有蛮多人看的吧,可以采集采集评论看过的朋友发出来的评论,分析分析 这周刚好…...
【C语言】详讲qsort库函数
qsort函数介绍具体作用qsort函数是一种用于对不同类型数据进行快速排序的函数,排序算法有很多最常用的冒泡排序法仅仅只能对整形进行排序,qsort不同,排序类型不受限制,qsort函数的底层原理是一种快速排序.基本构造qsort( void* arr, int sz, int sizeof, cmp_code);…...
SEO技术风口来了|SEO能否抓住全球约93%的网络用户?
开篇词作者/出品人 | 美洽 SEO 流量专家 白桦为什么要做一个 SEO 专栏?在一部分人眼中,SEO(搜索引擎优化)已经是老掉牙的玩意儿,在这个信息爆炸的年代,它似乎已经无法承担吸引流量的主要作用。但ÿ…...
mxnet版本与numpy,requests等都不兼容问题
简介 跟着李沐学AI时遇到的mxnet环境问题。 问题 使用pip install mxnet时会重新安装相匹配的numpy和requests,而这新安装的这两个版本不满足d2l所需的版本。 然后报错: ERROR: pips dependency resolver does not currently take into account all …...
逆向分析——壳
你脑海中的壳是什么 壳在自然界是动物的保护壳,软件同样有保护壳,为了防止破解 也许大海给贝壳下的定义是珍珠,也许时间给煤炭下的定义是钻石 ——沙与沫 壳的由来 在DOS时代,壳一般指的是磁盘加密软件中的一段加密程序 后来发展…...
Arm嵌入式多线程编程:原理、实践与优化
1. Arm嵌入式开发中的多线程编程基础在嵌入式系统开发中,多线程编程是提高系统响应能力和资源利用率的重要手段。Arm架构作为嵌入式领域的主流处理器架构,其编译器工具链对多线程编程提供了完善的支持。不同于通用计算环境,嵌入式系统的多线程…...
独立语音AI创业必读,ElevenLabs Independent计划全链路解析:从白名单内测→额度扩容→月度用量审计→续期失败预警
更多请点击: https://intelliparadigm.com 第一章:ElevenLabs Independent计划的战略定位与生态价值 ElevenLabs Independent 计划并非单纯的技术授权项目,而是面向独立开发者、开源创作者与小型 AI 应用团队构建的可持续协作基础设施。其核…...
别再手动拷贝DLL了!用批处理一键搞定NX二次开发EXE的环境变量配置(VS2015+NX12)
NX二次开发环境配置革命:批处理脚本全自动解决方案 引言 对于NX二次开发工程师来说,最令人头疼的莫过于每次编译后的EXE文件无法直接运行的问题。传统解决方案要么需要手动拷贝DLL文件,要么必须将EXE放置到特定目录下,这些方法不仅…...
保姆级教程:小白也能轻松上手 AI 硬件
大家好,我是siuser小伟如果你是一个小白,又想玩一下硬件的话,那我一定推荐你去接触 AI 小智。因为他们的生态非常好,教程非常详细,你也可以跑一个专属于你自己的 AI 硬件。这篇文章专门写给第一次部署小智 Go 后端的人…...
高性能服务架构缓存设计:Redis+Caffeine
👉 这是一个或许对你有用的社群🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料: 《项目实战(视频)》:从书中学,往事上…...
一天怎么完成论文初稿
写论文这件事,从选题到完稿,哪一步都能卡掉你半条命。我身边不少读研读博的同学,白天泡实验室做实验,晚上挤时间写论文,熬了一两个月出初稿,结果格式不对、文献零散,还要和同门改来改去…...
实战:用Python的scipy和numpy搞定分数阶灰色模型(FGM),附完整代码和避坑指南
实战:用Python的scipy和numpy搞定分数阶灰色模型(FGM),附完整代码和避坑指南 灰色预测模型在数据分析领域一直占有一席之地,特别是当面对小样本、贫信息的数据预测问题时。传统灰色模型通过一阶累加生成指数规律明显的…...
轻量级内存清理神器Mem Reduct:如何让旧电脑重获新生?[特殊字符]
轻量级内存清理神器Mem Reduct:如何让旧电脑重获新生?😊 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirr…...
当FanControl风扇集体“罢工“:从系统诊断到完美修复的技术探险
当FanControl风扇集体"罢工":从系统诊断到完美修复的技术探险 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/G…...
别再折腾了!Windows 10/11下用VS2019编译ActiveMQ-CPP库的保姆级避坑指南
Windows平台下VS2019编译ActiveMQ-CPP库的终极解决方案 在Windows环境下使用Visual Studio 2019编译ActiveMQ-CPP库,对于需要实现高效消息队列通信的C开发者而言,是一个既关键又充满挑战的任务。不同于其他语言生态中"一键安装"的便捷&#x…...
