当前位置: 首页 > news >正文

做了个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)
SM4NONENoPadding
AESCBCZeroPadding
DESCFBISO10126Padding
DESedeCTROAEPPadding
CTSPKCS1Padding
ECBPKCS5Padding
OFBSSL3Padding
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中央仓库,附详细使用说明)

前言&#xff1a;之前工作中做过两个功能&#xff0c;就是之前写的这两篇博客&#xff0c;最近几天有个想法&#xff0c;给它做成一个springboot的start启动器&#xff0c;直接引入依赖&#xff0c;写好配置就能用了 springboot使用自定义注解实现接口参数解密&#xff0c;普通…...

【Flutter从入门到入坑】Flutter 知识体系

学习 Flutter 需要掌握哪些知识&#xff1f; 终端设备越来越碎片化&#xff0c;需要支持的操作系统越来越多&#xff0c;从研发效率和维护成本综合考虑&#xff0c;跨平台开发一定是未来大前端的趋势&#xff0c;我们应该拥抱变化。而 Flutter 提供了一套彻底的移动跨平台方案…...

顺序表的基本操作

目录 一.什么是顺序表 二.顺序表的基本操作 1.初始化 2.增容 3.尾插 4.头插 5.尾删 6.头删 7.指定位置插入 8.指定位置删除 9.打印 10.查找 11.销毁 一.什么是顺序表 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构&#xff0c;一般情况下采用数组…...

设计模式——创建型模型——单列模式(8种实现)

前言&#xff1a; &#x1f44f;作者简介&#xff1a;我是笑霸final&#xff0c;一名热爱技术的在校学生。 &#x1f4dd;个人主页&#xff1a;个人主页1 || 笑霸final的主页2 &#x1f4d5;系列专栏&#xff1a;计算机基础专栏 &#x1f4e7;如果文章知识点有错误的地方&#…...

【软考中级】软件设计师笔记

计算机系统的性能一般包括两个方面&#xff1a;一方面是它的可用性&#xff0c;也就是计算机系统能正常工作的时间&#xff0c;其指标可以是能够持续工作的时间长度&#xff0c;也可以是在一段时间内&#xff0c;能正常工作的时间所占的百分比 另一方面是处理能力&#xff0c;又…...

包教包会的ES6

自学参考&#xff1a;http://es6.ruanyifeng.com/ 一、ECMAScript 6 简介 ECMAScript 6.0&#xff08;以下简称 ES6&#xff09;是 JavaScript 语言的下一代标准&#xff0c;已经在 2015 年 6 月正式发布了。它的目标&#xff0c;是使得 JavaScript 语言可以用来编写复杂的大…...

python学习——【第四弹】

前言 上一篇文章 python学习——【第三弹】 中学习了python中的流程控制语句&#xff0c;这篇文章我们接着学习python中的序列。先给大家介绍不可变序列 字符串和可变序列 列表&#xff0c;下一篇文章接着补充元组&#xff0c;集合和字典。 序列 指的是一块可以存放多个值的…...

Web3中文|无聊猿Otherside元宇宙启动第二次旅行

3月9日消息&#xff0c;无聊猿Bored Ape Yacht Club母公司Yuga Labs公布了其Otherside元宇宙游戏平台第二次测试的最新细节。Yuga Labs公司称&#xff0c;“第二次旅行”将于3月25日举行&#xff0c;由四位Otherside团队长带领完成近两小时的游戏故事。本次旅行对Otherdeed NFT…...

SpringCloud-7_OpenFeign服务调用

OpenFeign介绍OpenFeign是什么1.OpenFeign是个声明式WebService客户端&#xff0c;使用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 …...

测试微服务:快速入门指南

在过去几年中&#xff0c;应用程序已经发展到拥有数百万用户并产生大量数据。使用这些应用程序的人期望快速响应和 24/7 可用性。为了使应用程序快速可用&#xff0c;它们必须快速响应增加的负载。 一种方法是使用微服务架构&#xff0c;因为在单体应用程序中&#xff0c;主要…...

MySQL Show Profile分析

6 Show Profile分析&#xff08;重点&#xff09; Show Profile是mysql提供可以用来分析当前会话中语句执行的资源消耗情况。可以用于SQL的调优的测量 官网文档 默认情况下&#xff0c;参数处于关闭状态&#xff0c;并保存最近15次的运行结果 分析步骤&#xff1a; 1、是否…...

基于Docker快速搭建蜜罐Dionaea(30)

实验目的 1. 快速搭建Dionaea蜜罐 2. 使用Nmap扫描测试Dionaea蜜罐预备知识1. 初步认识Dionaea dionaea&#xff0c;中文的意思即捕蝇草&#xff0c;是否形容蜜罐很形象&#xff1f;dionaea是nepenthes&#xff08;猪笼草&#xff09;的发展和后续&#xff0c;更加容易被部署和…...

WP_Query 的所有参数及其讲解和实用案例

WP_Query 是 WordPress 提供的一个强大的查询工具&#xff0c;用于获取与当前页面或文章相关的内容。下面是 WP_Query 的所有参数及其讲解&#xff1a;author: 查询特定作者的文章。可以是作者 ID、作者登录名或作者昵称。实用案例&#xff1a;查询作者为 "John Smith&quo…...

100个网络运维工作者必须知道的小知识!(上)

1&#xff09;什么是链接&#xff1f; 链接是指两个设备之间的连接。它包括用于一个设备能够与另一个设备通信的电缆类型和协议。 2&#xff09;OSI参考模型的层次是什么&#xff1f; 有7个OSI层&#xff1a;物理层&#xff0c;数据链路层&#xff0c;网络层&#xff0c;传输…...

Python如何获取大量电影影评,做可视化演示

前言 《保你平安》今天上映诶&#xff0c;有朋友看过吗&#xff0c;咋样啊 这是我最近比较想看的电影了&#xff0c;不过不知道这影评怎么样&#xff0c;上周末的点映应该是有蛮多人看的吧&#xff0c;可以采集采集评论看过的朋友发出来的评论&#xff0c;分析分析 这周刚好…...

【C语言】详讲qsort库函数

qsort函数介绍具体作用qsort函数是一种用于对不同类型数据进行快速排序的函数&#xff0c;排序算法有很多最常用的冒泡排序法仅仅只能对整形进行排序,qsort不同,排序类型不受限制,qsort函数的底层原理是一种快速排序.基本构造qsort( void* arr, int sz, int sizeof, cmp_code);…...

SEO技术风口来了|SEO能否抓住全球约93%的网络用户?

开篇词作者/出品人 | 美洽 SEO 流量专家 白桦为什么要做一个 SEO 专栏&#xff1f;在一部分人眼中&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;已经是老掉牙的玩意儿&#xff0c;在这个信息爆炸的年代&#xff0c;它似乎已经无法承担吸引流量的主要作用。但&#xff…...

mxnet版本与numpy,requests等都不兼容问题

简介 跟着李沐学AI时遇到的mxnet环境问题。 问题 使用pip install mxnet时会重新安装相匹配的numpy和requests&#xff0c;而这新安装的这两个版本不满足d2l所需的版本。 然后报错&#xff1a; ERROR: pips dependency resolver does not currently take into account all …...

逆向分析——壳

你脑海中的壳是什么 壳在自然界是动物的保护壳&#xff0c;软件同样有保护壳&#xff0c;为了防止破解 也许大海给贝壳下的定义是珍珠&#xff0c;也许时间给煤炭下的定义是钻石 ——沙与沫 壳的由来 在DOS时代&#xff0c;壳一般指的是磁盘加密软件中的一段加密程序 后来发展…...

为 Argo CD 应用程序指定多个来源

在 Argo CD 2.6 中引入多源功能之前,Argo CD 仅限于管理来自 单个 Git 或 Helm 存储库 的应用程序。用户必须将每个应用程序作为 Argo CD 中的单个实体进行管理,即使资源存储在多个存储库中也是如此。借助多源功能,现在可以创建一个 Argo CD 应用程序,指定存储在多个存储库…...

verilog specify语法

specify block用来描述从源点&#xff08;source&#xff1a;input/inout port&#xff09;到终点&#xff08;destination&#xff1a;output/inout port&#xff09;的路径延时&#xff08;path delay&#xff09;&#xff0c;由specify开始&#xff0c;到endspecify结束&…...

CMake编译学习笔记

CMake学习笔记CMake编译概述CMake学习资源CMake编译项目架构cmake指令CMakeList基础准则CMakeList编写项目构建cmake_minimum_required() 和 project()set()find_package()add_executable()aux_source_directory()连接库文件include_directories()和target_include_directories…...

Day913.反向代理和网关是什么关系 -SpringBoot与K8s云原生微服务实践

反向代理和网关是什么关系 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于反向代理和网关是什么关系的内容。 一、反向代理 反向代理 是一种网络技术&#xff0c;用于将客户端的请求转发到一个或多个服务器上&#xff0c;并将响应返回给客户端。与正向代理不同&am…...

IT行业就业趋势显示:二季度平均月薪超8千

我国的IT互联网行业在近些年来规模迅速扩大&#xff0c;技能和技术水平也明显提升&#xff0c;目前IT互联网行业已经成为社会发展中新型产业的重要组成部分&#xff0c;行业的人才队伍也在不断的发展壮大&#xff0c;选择进入入互联网行业工作的人也越来越多。 根据58同城前段…...

【毕业设计】基于Java的五子棋游戏的设计(源代码+论文)

简介 五子棋作为一个棋类竞技运动&#xff0c;在民间十分流行&#xff0c;为了熟悉五子棋规则及技巧&#xff0c;以及研究简单的人工智能&#xff0c;决定用Java开发五子棋游戏。主要完成了人机对战和玩家之间联网对战2个功能。网络连接部分为Socket编程应用&#xff0c;客户端…...

C#:Krypton控件使用方法详解(第十四讲) ——kryptonSeparator

今天介绍的Krypton控件中的kryptonSeparator。下面介绍控件的外观属性如下图所示&#xff1a;Cursor属性&#xff1a;表示鼠标移动过该控件的时候&#xff0c;鼠标显示的形状。属性值如下图所示&#xff1a;DrawMoveIndicator属性&#xff1a;表示确定移动分隔符时是否绘制移动…...

Java的jar包打包成exe应用

将springboot项目使用maven打出的jar包&#xff0c;打成windows平台下exe应用程序包&#xff08;自带jre环境&#xff09;。 工具&#xff1a;1、exe4j 2、Inno Setup 工具放到网盘&#xff0c;链接&#xff1a;https://pan.baidu.com/s/1ZHX8P7u-7GBxaC6uaIC8Ag 提取码&#x…...

Latex学习笔记

Latex 学习笔记 快速入门 编译软件: TeX Live TexStudio, Ctex, 线上: Overleaf第一个示例代码&#xff1a; \documentclass{article} % 设置文档使用的文档类 % 导言区 \title{my first Latex document} \author{Jclian91} \date{\today} \begin{document} % 正文区\maket…...

【c++复习】C++的基础知识(常用关键字、缺省参数、函数重载、引用)

C基础写在开头C基础常用关键字using namespace流插入和流提取操作符内联函数(inline)宏auto关键字 (c11nullptr (c11缺省参数函数重载引用写在开头 C基础部分我想介绍如下几个关键点&#xff1a; 常见关键字命名空间的定义和使用缺省参数函数重载引用、指针和引用的区别内联函…...

可以做淘宝店铺开关灯网站/seo的排名机制

日期&#xff1a;2018年11月28日 环境&#xff1a;Windows 10&#xff0c;VS2015 前言 .NET 类库中提供了一个快捷使用多线程的帮助类BackgroundWorker&#xff0c;能够快速创建一个新的线程&#xff0c;并能报告进度&#xff0c;暂停&#xff0c;以及在线程完成后处理别的任务…...

彭州建设局网站/产品网络推广方案

题目大意&#xff1a;有n封邮件现在要将其含有相同的特征的放在一起&#xff0c;M X Y代表X&#xff0c;Y具有相同的特征&#xff0c;S Y代表Y被错判了现在问你这两种操作完成后还有多少种的信&#xff0c;注意特征可以传递 X Y 有相同特征Y Z有相同的特征&#xff0c;则X Y Z同…...

公司起名大全2023最新版的免费/搜索引擎优化是什么?

目录 类组件和函数组件如何使用 props 和 state 外部数据和内部数据&#xff0c;对应Vue的props 和 data如何绑定事件复习this 1.组件 component 1.1 Element 和 component const div React.createElement(div,...) 这是一个React元素&#xff08;d小写&#xff09;const …...

用javaweb做网站/上海搜索引擎优化公司排名

Web 2.0应用的数据类型有两种&#xff1a;一种是存储在相关数据库&#xff08;如Microsoft SQL Server或 Oracle Database &#xff09;中的数据&#xff0c;另一种是作为非结构化数据进行存储的固定内容&#xff08;如音乐、照片、视频&#xff09;。用来存储数据库数据的设备…...

wordpress不能翻页/网站策划报告

http://www.ouravr.com/bbs/bbs_content_all.jsp?bbs_sn3228953 1. 简要说明 JLink的调试功能、烧写Flash的功能都很强大&#xff0c;但是对于S3C2410、S3C2440的Flash操作有些麻烦&#xff1a;烧写Nor Flash时需要设置SDRAM&#xff0c;否则速率很慢&#xff1b;烧写Nand Fla…...

哪个网站可以搭建网页/广州网站推广软件

1.为什么使用抽象&#xff1f;(1) 类用于描述现实生活中一类事物&#xff0c;类中有属性有方法&#xff0c;并且方法都有方法体。某种情况下&#xff0c;父类只知道子类应该具备一个怎样的方法&#xff0c;但是不能明确知道子类如何实现该方法。例如&#xff1a;几何图形&#…...