RSA加解密三方调用

news/2024/11/9 0:43:44/

RSA三方调用

github项目demo

整体项目结构

├─ExposedInterface 服务提供方的单独接口依赖包(里面只有实体和暴露接口) 根据服务提供者每次打包release 正式版本包
│ ├─src
│ │ ├─main
│ │ │ ├─java
│ │ │ │ └─com
│ │ │ │ └─weroom
│ │ │ │ ├─domain 实体对象
│ │ │ │ │ ├─dto
│ │ │ │ │ ├─enums
│ │ │ │ │ └─vo
│ │ │ │ ├─fallback 熔断实现
│ │ │ │ └─openfeign 暴露接口(htpp请求 ip+端口)
│ │ │ └─resources 打包 release1.0
│ │ └─test
│ │ └─java

├─ServerCustomer 服务消费者
│ ├─src
│ │ ├─main
│ │ │ ├─java
│ │ │ │ └─com
│ │ │ │ └─weroom
│ │ │ │ ├─config 配置文件
│ │ │ │ ├─controller 消费者mvc
│ │ │ │ ├─domain 消费者实体
│ │ │ │ │ ├─dto
│ │ │ │ │ ├─enums
│ │ │ │ │ └─vo
│ │ │ │ ├─service 消费者自己的业务逻辑 依赖服务提供者的暴露接口 引进依赖
│ │ │ │ │ └─impl 组装加密数据 调用依赖接口
│ │ │ │ └─util 加解密工具包
│ │ │ └─resources 引入服务提供方依赖包(也就是第一个release1.0包)
│ │ └─test
│ │ └─java

└─ServerProvider 服务提供者
├─src
│ ├─main
│ │ ├─java
│ │ │ └─com
│ │ │ └─weroom
│ │ │ ├─config 配置文件
│ │ │ ├─controller 服务提供者的提供的对外接口 第一个项目的expose暴露接口从这里面单独抽出去
│ │ │ ├─domain 服务提供者实体
│ │ │ │ ├─dto
│ │ │ │ ├─enums
│ │ │ │ └─vo
│ │ │ ├─service 服务提供者接受来到服务消费者的请求,进行解密
│ │ │ │ └─impl
│ │ │ └─util 加解密工具类
│ │ └─resources
│ └─test
│ └─java

服务提供方

支付

允许已授权的用户通过此接口更新自己的信息。
:::tips

  • URL/provider
  • MethodPOST
  • 需要登录:是
  • 需要鉴权:是
    :::

请求参数

参数类型是否必传说明
dataString加密数据
encryptKeyStringrsa加密之后的key
nowString时间搓

:::info
💡 注意,data是泛型T,对象转成string,然后加密,解密出来需要根据提供的DTO转成对应实体
:::

请求示例

可以仅传递部分请求参数。

{"data": "rjvPAvCy/BjE55r7mzE+r22Rt5kC7fIEzBaHAMjlvsZalC+pOSPLSBnfqYikMsG1vx/CFB5nVLiGcVT0kKLwNVCRPx/qZbV+6rZxwr7nB7CX8f5vGmlMd1EpCDdwMt9T5tFbIn0iyBtPWwq5RwAjyb+RWKnISexso339tJquveY=","encryptKey": "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBALM9gyzoliA8R2da9tqfh5c7V/Zcn5etZDNmeqv/1YROoe5O4Vo8N4lBSGP+IKSXsSfCm13v3ZDrxqUpb6YCBnz17W3DR9TxUNQraB4y286fRPsl6N/OMB8EhhCTKuvHyjqgq8sIY5ymg9PVsIetJglVp870hRRDYvJdRaUyf5DpAgMBAAECgYBz+QT69bLNQLNiqHS4mCf/LiKIAP4yAbqnl1MgHvRkGwyjSN5+qB+260qPiEpOtOenNj+Y1C6kKinpi5n167GN60Y6gM/vVHSUA/lv2v/fR4vDRj9CMYu2vNuKrWV3F3y577/qkuCIWaD+iXU9WsQTsuL3UkP5iz3sVgD9K7kwAQJBAOPjKmmKEghwGaCXx05E0BF7UHT4b7BZhCPdCj115PAL0xNqqKYyRhYGfndopcB16Jl7fJJLxjj+02V2YsfkW4ECQQDJWgofvt8Qjf4VLUnl98rnQ6xF2UbXdSOm9JCILU7rtz92TVC7bWy4R0mqX+S5zFGR5Znnk7f2HAP+kDAn3olpAkAkeQIbvB5gvVhMrJ4Yd8j5U0wwPGbbyafteX4fEhRfGvVgYSy21MsE0WtCPzxwDi75CZuJaplCG/7HeWgb5/+BAkBtXnkNUVI83cPboOP5BCW0hK+4qRKvybL55vHy5hluM/VGvyxRAlkBp8c9wiStP2w3QW3dugE8r28EATIHFfuxAkAxV4hHGD6BbHRiCtSMNOQ3XGOZGdlmR4PfPFabv+jfAyoECHe4QHdkBBqdNKTyVVQUpNqPsJ0EsfBTplZlDxTu","now": "1681438549828"
}

解密实现

String server = null;
try {Req.data = providerDTO.getData();Req.encryptkey =providerDTO.getEncryptKey();server = RSA.server();
} catch (Exception e) {
}
return CommonResult.success(ProviderVO.builder().data(server).build());

成功响应

:::tips
条件:请求参数合法,并且用户身份校验通过。
状态码:200 OK
响应示例
:::

{"code": 200,"message": "","data": "{"content":"ccsadfjaslkf;jasd;lfj","id":1,"orderNo":"111","type":1}","now": "1681439866355"
}

错误响应

:::tips
条件:非法的秘钥,io文件流异常。
状态码500 BAD REQUEST
响应示例:
:::

{"code": 500,"message": "非法的文件秘钥","data": "","now": "1681439866355"
}

服务消费者

支付

允许已授权的用户通过此接口更新自己的信息。
:::tips

  • URL/customer
  • MethodPOST
  • 需要登录:是
  • 需要鉴权:是
    :::

引入依赖

<dependencies><dependency><groupId>com.exposed</groupId><artifactId>ExposedInterface</artifactId><version>1.0.RELEASE</version></dependency></dependencies>

请求参数

参数类型是否必传说明
dataString加密数据
encryptKeyStringrsa加密之后的key
nowString时间搓

:::info
💡 注意,data是泛型T,对象转成string,然后加密,解密出来需要根据提供的DTO转成对应实体
:::

请求示例

可以仅传递部分请求参数。

{"data": "rjvPAvCy/BjE55r7mzE+r22Rt5kC7fIEzBaHAMjlvsZalC+pOSPLSBnfqYikMsG1vx/CFB5nVLiGcVT0kKLwNVCRPx/qZbV+6rZxwr7nB7CX8f5vGmlMd1EpCDdwMt9T5tFbIn0iyBtPWwq5RwAjyb+RWKnISexso339tJquveY=","encryptKey": "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBALM9gyzoliA8R2da9tqfh5c7V/Zcn5etZDNmeqv/1YROoe5O4Vo8N4lBSGP+IKSXsSfCm13v3ZDrxqUpb6YCBnz17W3DR9TxUNQraB4y286fRPsl6N/OMB8EhhCTKuvHyjqgq8sIY5ymg9PVsIetJglVp870hRRDYvJdRaUyf5DpAgMBAAECgYBz+QT69bLNQLNiqHS4mCf/LiKIAP4yAbqnl1MgHvRkGwyjSN5+qB+260qPiEpOtOenNj+Y1C6kKinpi5n167GN60Y6gM/vVHSUA/lv2v/fR4vDRj9CMYu2vNuKrWV3F3y577/qkuCIWaD+iXU9WsQTsuL3UkP5iz3sVgD9K7kwAQJBAOPjKmmKEghwGaCXx05E0BF7UHT4b7BZhCPdCj115PAL0xNqqKYyRhYGfndopcB16Jl7fJJLxjj+02V2YsfkW4ECQQDJWgofvt8Qjf4VLUnl98rnQ6xF2UbXdSOm9JCILU7rtz92TVC7bWy4R0mqX+S5zFGR5Znnk7f2HAP+kDAn3olpAkAkeQIbvB5gvVhMrJ4Yd8j5U0wwPGbbyafteX4fEhRfGvVgYSy21MsE0WtCPzxwDi75CZuJaplCG/7HeWgb5/+BAkBtXnkNUVI83cPboOP5BCW0hK+4qRKvybL55vHy5hluM/VGvyxRAlkBp8c9wiStP2w3QW3dugE8r28EATIHFfuxAkAxV4hHGD6BbHRiCtSMNOQ3XGOZGdlmR4PfPFabv+jfAyoECHe4QHdkBBqdNKTyVVQUpNqPsJ0EsfBTplZlDxTu","now": "1681438549828"
}

加密实现

   try {TreeMap<String,Object> treeMap = Maps.newTreeMap();//providerDTO.getData() 可以是任何对象  需要加密的数据OrderDTO orderDTO = new OrderDTO();orderDTO.setOrderNo("111");orderDTO.setContent("ccsadfjaslkf;jasd;lfj");orderDTO.setType(1);orderDTO.setId(1);treeMap.put("data",orderDTO);Req client = RSA.client(treeMap);providerDTO.setData(Req.data);providerDTO.setEncryptKey(Req.encryptkey);} catch (Exception e) {}return this.openFeignService.pay(providerDTO).getData();

成功响应

:::tips
条件:请求参数合法,并且用户身份校验通过。
状态码:200 OK
响应示例
:::

{"code": 200,"message": "","data": "{"content":"ccsadfjaslkf;jasd;lfj","id":1,"orderNo":"111","type":1}","now": "1681439866355"
}

错误响应

:::tips
条件:非法的秘钥,io文件流异常。
状态码500 BAD REQUEST
响应示例:
:::

{"code": 500,"message": "非法的文件秘钥","data": "","now": "1681439866355"
}

服务提供方抽出的暴露接口

openfeign

package com.weroom;import com.weroom.domain.CommonResult;
import com.weroom.domain.dto.ProviderDTO;
import com.weroom.domain.vo.ProviderVO;
import com.weroom.fallback.ProviderFallback;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;@Component
@FeignClient(name = "settle", url = "192.168.0.154:8890", fallback = ProviderFallback.class, path = "/provider/")
public interface OpenFeignService {@ApiOperation(value = "支付")@LoadBalanced@PostMapping("pay")CommonResult<ProviderVO> pay(@RequestBody ProviderDTO providerDTO);@LoadBalanced@PostMapping("refund")CommonResult<ProviderVO> refund(@RequestBody ProviderDTO providerDTO);@ApiOperation(value = "分账")@LoadBalanced@PostMapping("sub-account")CommonResult<ProviderVO> subAccount(@RequestBody ProviderDTO providerDTO);
}

http://www.ppmy.cn/news/53036.html

相关文章

【Python】【进阶篇】7、Django模板系统

目录 7、Django模板系统1. Django的模板系统2. 模板系统的应用1) 模板传参2) render方法 7、Django模板系统 本节我们继续使用《Django视图函数》一节中的“Hello_my_django”函数来完成相关知识的讲解。 from django.http import HttpResponse def Hello_my_django(request)…

【mmdeploy】【TODO】使用mmdeploy将mmdetection模型转tensorrt

mmdetection转换 文章目录 mmdetection转换mmdetection 自带转换ONNX——无法测试使用mmdeploy(0.6.0)使用mmdeploy转onnx使用mmdeploy直接转tensorRT调试记录 先上结论&#xff1a;作者最后是转tensorrt的小图才成功的&#xff0c;大图一直不行。文章仅作者自我记录使用&#…

四、MyBatis获取参数值的两种方式(重点)

文章目录 四、MyBatis获取参数值的两种方式&#xff08;重点&#xff09;4.1 单个字面量类型的参数4.2 多个字面量类型的参数4.3 map集合类型的参数4.4 实体类类型的参数4.5 使用Param标识参数 四、MyBatis获取参数值的两种方式&#xff08;重点&#xff09; MyBatis获取参数值…

【无标题】c++异常机制的一些总结以及思考

在谈及c处理异常机制的方法之前我们不妨来回顾一下c语言是如何应对这块的。 终止程序&#xff0c;如assert&#xff0c;缺陷&#xff1a;用户难以接受。如发生内存错误&#xff0c;除0错误时就会终止程序。 返回错误码&#xff0c;缺陷&#xff1a;需要程序员自己去查找对应的…

Java API操作Jenkins和自定义Java构建镜像

文章目录 1、Java操作Jenkins1.1、Jenkins API支持格式json和xml1.2、Java API操作 2、自定义Java构建镜像 1、Java操作Jenkins 1.1、Jenkins API支持格式json和xml # json格式&#xff0c;{host}/api/json http://192.168.245.139:8080/api/json # 视图接口&#xff0c;json…

2023软件测试工具大全(自动化、接口、性能、安全、测试管理)

目录 前言 一、自动化测试工具 Selenium Appium TestComplete 二、接口测试工具 Postman SoapUI JMeter 三、性能测试工具 LoadRunner JMeter Gatling 四、安全测试工具 Burp Suite OWASP ZAP Nmap 五、测试管理工具 TestRail JIRA TestLink 总结 前言 …

day1 什么是互联网

目录 计算机网络的定义与分类 网络的网络 互联网的组成 互联网的边缘部分 互联网基础结构发展的三个阶段 第一阶段&#xff08;1969 - 1990&#xff09; 第二阶段&#xff08;1985 - 1993&#xff09; 第三阶段&#xff08;1993 - 现在&#xff09; 20世纪90年代&#xff…

数字北京城,航行在联通2000M的“大运河”

前故宫博物院院长单霁翔&#xff0c;在《大运河漂来紫禁城》一书中提到过&#xff0c;紫禁城里的石材、木材&#xff0c;甚至每一块砖&#xff0c;都是通过大运河&#xff0c;跋山涉水来到北京的。某种程度上说&#xff0c;北京城的繁荣与这条纵跨南北的“中华大动脉”密不可分…