点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
我的要求:
我有开发SAP ECC <-> PI/PO <->第三方API的场景。
API将仅接受加密的数据和加密的密钥,对于响应,它将发送解密的数据,我们需要使用在请求时生成的相同密钥对数据解密。
示例请求Json数据
{"用户名":"
demo.user@test.com ","密码":" Text @ XXXXX" }
经过加密的请求有效载荷后
{
"数据":" dsDCgys2hVbVm7cMQbKwEDwZyjcD7mJnZ43w7/2j2DHJNwc93MZ5flWS3kM9YZ2Fdum rz/N + l4EhB7KOUSNP69JJ + 318mnLD9x3i117ynyggpIPg
"APP_KEY": "VuvDyKRagUXBXC2Ikdx73RfVqrKJoKOHP/GSEhqU + NWasCwP/+ 5kE/+ + RSJDk2kusVZokFMcHI0Ute 6cqjhnRrbMtpS2z284wziDspKJ4zZMl1Ms2aPgemt6TvYnRHMH/jaAjRZ8BivD38qBs6 NeD06u2DrD + ni4UDiJJ2AmbNvH8ui0SLU3K5EbzfbW72W05aQj3hZqpM97ZVAJuXaTDZg =="
}
此处数据将包含用户名和密码的加密格式,而 app_key 将包含加密的AES 256位密钥。
对于响应有效载荷
{
"数据":" 4gfnGc0PVEZs5rPQojn9tZ2u8Gk + LuWoSyLYy2MWe1MfGylI2i7f9gv7zmFBjrYeOVpxVcqcvPEgsvAmkXSADWh2c5",
" status_cd":1
}
现在需要使用在请求时生成的相同密钥进行解密。
所以最终我得到如下响应:
解密后的有效载荷
{
"身份验证令牌":" 68f123a2fb7a5126b19c76870850135a4b16d4",
"到期":360
}
发展:
所以我尝试在UDF中使用REST查找。
使用某些测试工具检查过的代码中,加密和解密工作正常。
但是我在测试映射时遇到了错误。
(23.4 kB)
Jatin,
我认为创建目标结构时出了点问题。 您是否尝试过父节点例如 记录吗?
我需要从rest api获取访问令牌,并在发送实际数据时在标头级别使用它。
我收到了JSON格式的访问令牌,并将其存储在动态属性中。 请检查下面的代码是否对您有帮助-
字符串标记="";
字符串id ="";
StringBuffer sb = new StringBuffer();
//1.获取频道的系统访问器。
String party =""; //不能将空值从Directory传递到映射参数。
Channel channel = LookupService.getChannel(party," BC_ *"," CC_RCVR _ * _ LOOKUP");
SystemAccessor访问器= LookupService.getSystemAccessor(channel);
getTrace()。addInfo("令牌查找参数-通道:" + channel);
尝试{
//2.根据数据类型创建有效负载。
//将service.getBinaryPayload()用于二进制有效载荷,
//或service.getTextPayload()用于文本有效载荷。
InputStream inputStream;
String reqString =" grant_type = password&client_id = *****&client_secret=*****&username=******@**.com.*****&password=****** *";
getTrace()。addDebugMessage(" Request:" + reqString);
inputStream =(InputStream)新的ByteArrayInputStream(reqString.getBytes());
com.sap.aii.mapping.lookup.Payload有效负载= LookupService.getXmlPayload(inputStream);
//3.执行查找。
com.sap.aii.mapping.lookup.Payload结果= accessor.call(有效载荷);
//4.解析结果,使用真正的JSON解析器可以更好地实现
byte [] b =新字节[4096];
for(int n;(n = result.getContent()。read(b))!= -1;){
sb.append(new String(b,0,n));
}
getTrace()。addDebugMessage(" Response:" + sb);
int i = sb.indexOf(" \" access_token \":\"")+ 16;
int j = sb.indexOf(" \" instance_url \"");
token = sb.substring(i,j-2);
getTrace()。addInfo(" Token:" + token);
}
捕获(异常e){
e.printStackTrace();
}
最终{
//5.关闭访问器以释放资源。
如果(accessor!= null)accessor.close();
}
//返回令牌;
//动态配置
getTrace()。addInfo(" Token:" + token);
//String名称空间=" http://sap.com/xi/XI/System/ REST ";
//String AccessToken ="";
地图map = container.getTransformationParameters();
DynamicConfiguration conf =(DynamicConfiguration)map.get(StreamTransformationConstants.DYNAMIC_CONFIGURATION);
if(conf!= null){
//getTrace()。addInfo(" Access_Token:" + Access_Token);
DynamicConfigurationKey confKey = DynamicConfigurationKey.create(" http://sap.com/xi/XI/系统/REST "," Access_Token");
conf.put(confKey,令牌);
}
//getTrace()。addInfo(" Access_Token:" + Access_Token);
返回"";
BR,
Rashmi
你好Rashmi,
感谢您的输入,我已经更改了使用API的方法,因此我没有使用任何查找。 此外,我已经处理了UDF中的所有加密和解密以及"全局变量"来存储值,并在响应时使用了相同的值。
感谢和问候,
Jatin Sharma
一周热门 更多>