淘宝客导购网站建设?,中小学门户网站建设,云虚拟主机可以做多少个网站,孝南区建设局网站前言#xff1a;之前工作中做过两个功能#xff0c;就是之前写的这两篇博客#xff0c;最近几天有个想法#xff0c;给它做成一个springboot的start启动器#xff0c;直接引入依赖#xff0c;写好配置就能用了 springboot使用自定义注解实现接口参数解密#xff0c;普通… 前言之前工作中做过两个功能就是之前写的这两篇博客最近几天有个想法给它做成一个springboot的start启动器直接引入依赖写好配置就能用了 springboot使用自定义注解实现接口参数解密普通字段json集合 使用反射实现RequestBody的参数校验功能 现在它来了。
项目地址
giteehttps://gitee.com/vhukze/master-key
githubhttps://github.com/vhukze/master-key 目录
介绍
软件架构
配置教程
1.引入依赖
2.配置
3.注意事项
使用说明
不同传参方式示例
不同参数类型示例 validation模块注解校验
最后 介绍
用来实现接口参数解密的工具只需引入依赖在配置文件写明加密的配置在接口上使用指定注解即可实现该接口的参数解密。并支持使用validation模块的注解进行参数校验支持分组校验功能
支持的对称加密方式SM4AESDESDESede 支持的非对称加密方式RSASM2
软件架构
使用java8springboot2.x.x一个简单的springboot starter 启动器功能中用到的工具类是hutool
配置教程
1.引入依赖 dependencygroupIdio.github.vhukze/groupIdartifactIdmaster-key-spring-boot-starter/artifactIdversion目前最新版本/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(ListHandlerMethodArgumentResolver 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填充方式paddingSM4NONENoPaddingAESCBCZeroPaddingDESCFBISO10126PaddingDESedeCTROAEPPaddingCTSPKCS1PaddingECBPKCS5PaddingOFBSSL3PaddingPCBC
非对称加密配置示例
master-key:# 加密方式encode: SM2# 使用json格式参数时解密之前json的key 不配置此参数则代表使用text格式参数只传递加密后的字符串json-key:# 公钥public-key: MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEDRhJQbkA5SKceAaJmtdOBiRzCqwei4WRzAkBrZ9SkBZhZ1zC4nteRLVi754MsI/8vsiNK2lV518E8RaNwmnLA# 私钥private-key: MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQ
3.注意事项
使用SM4和SM2国密加密算法时需要引入国密加密的依赖 如下 dependencygroupIdorg.bouncycastle/groupIdartifactIdbcprov-jdk15to18/artifactIdversion1.69/version/dependency
使用说明
支持自定义实体类、基础数据类型及其包装类、集合类型、map类型。加密前参数格式跟正常请求接口时相同
不同传参方式示例
例如当前接口所需参数为{id:1,count:4}
加密后为c7dc378bf0c4da001466818765813a506b1a6b37e960b7ca
1.json格式传参
在配置文件配置好json-key并使用配置的json-key构建json字符串比如配置的json-key为strjson字符串如下
{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.集合类型
接口参数为ListInteger集合
加密前的请求参数[1,2,3]
实际请求 接口接收到的参数 validation模块注解校验
实现了一些常用的注解并支持分组校验功能目前实现的注解有以下这些
数据类型注解Integer、Long、ShortNotNull、Max、Min、NullStringNotNull、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类型参数的解密、不同接口使用不同解密方式等功能