目录
目标:
步骤:
一、FaaS连接器
二、页面步骤介绍
目标:
轻松搞定高级认证!!!
步骤:
提示:这里可以添加要学的内容
一、FaaS连接器
1. 界面介绍
说明: 右上点击进来 => 点击连接器工厂 => 填写信息(开发语言分三种)
接口入参填写,可以直接在上面测试。不过可以前往云 IDE开发。
工具类(宜搭给的加解密)DESUtil
package com.alibaba.work.faas.util;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import com.aliyuncs.utils.StringUtils;
import java.security.SecureRandom;
import org.apache.commons.codec.binary.Base64;
import javax.crypto.SecretKey;
import java.io.IOException;
import javax.crypto.Cipher;
public class DESUtil {
private final static String DES = "DES";
public static void main(String[] args) {
String data = "测试";
String key = "asasas";
String encryptStr = encrypt(data, key);
System.out.println("加密后的字符串:" + encryptStr);
String decryptStr = decrypt(encryptStr, key);
System.out.println("解密后的字符串:" + decryptStr);
}
/**
* Description 根据键值进行加密
*
* @param data
* @param key 加密键byte数组
* @return
* @throws Exception
*/
public static String encrypt(String data, String key) {
System.out.println("ddata+++++" + data);
System.out.println("data.getBytes()+++++" + data.getBytes());
if (null == data || StringUtils.isEmpty(key)) {
System.out.println("入参为空,data:" + data + ",key=" + key);
return null;
}
try {
byte[] bt = encrypt(data.getBytes(), key.getBytes());
String strs = Base64.encodeBase64String(bt);
return strs;
}
catch (Exception ex) {
System.out.println("加密遇到错误:");
ex.printStackTrace();
}
return null;
}
/**
* Description 根据键值进行解密
*
* @param data
* @param key 加密键byte数组
* @return
* @throws IOException
* @throws Exception
*/
public static String decrypt(String data, String key) {
System.out.println("decrypt+++++" + data);
if (null == data|| StringUtils.isEmpty(key)) {
System.out.println("入参为空,data:" + data + ",key=" + key);
return null;
}
try {
byte[] dataNew = Base64.decodeBase64(data);
byte[] bt = decrypt(dataNew, key.getBytes());
return new String(bt);
}
catch (Exception ex) {
System.out.println("解密遇到错误:");
ex.printStackTrace();
}
return null;
}
/**
* Description 根据键值进行加密
*
* @param data
* @param key 加密键byte数组
* @return
* @throws Exception
*/
private static byte[] encrypt(byte[] data, byte[] key) throws Exception {
// 生成一个可信任的随机数源
SecureRandom sr = new SecureRandom();
// 从原始密钥数据创建DESKeySpec对象
DESKeySpec dks = new DESKeySpec(key);
// 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
SecretKey securekey = keyFactory.generateSecret(dks);
// Cipher对象实际完成加密操作
Cipher cipher = Cipher.getInstance(DES);
// 用密钥初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);
return cipher.doFinal(data);
}
/**
* Description 根据键值进行解密
*
* @param data
* @param key 加密键byte数组
* @return
* @throws Exception
*/
private static byte[] decrypt(byte[] data, byte[] key) throws Exception {
// 生成一个可信任的随机数源
SecureRandom sr = new SecureRandom();
// 从原始密钥数据创建DESKeySpec对象
DESKeySpec dks = new DESKeySpec(key);
// 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
SecretKey securekey = keyFactory.generateSecret(dks);
// Cipher对象实际完成解密操作
Cipher cipher = Cipher.getInstance(DES);
// 用密钥初始化Cipher对象
cipher.init(Cipher.DECRYPT_MODE, securekey, sr);
return cipher.doFinal(data);
}
}
我们需要把代码写到外面FaasEntry 这个类中。
package com.alibaba.work.faas;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.work.faas.common.AbstractEntry;
import com.alibaba.work.faas.common.FaasInputs;
import com.alibaba.work.faas.util.DESUtil;
import com.alibaba.work.faas.util.DingOpenApiUtil;
import com.alibaba.work.faas.util.YidaConnectorUtil;
import com.alibaba.work.faas.util.YidaConnectorUtil.ConnectorTypeEnum;
import com.alibaba.work.faas.util.YidaConnectorUtil.YidaResponse;
import com.aliyun.credentials.utils.StringUtils;
import com.aliyun.dingtalkyida_1_0.models.BatchSaveFormDataRequest;
import com.aliyun.fc.runtime.Context;
/**
* @Description 宜搭Faas连接器函数入口,FC
* handler:com.alibaba.work.faas.FaasEntry::handleRequest
* @Version 2.1
* @Author bufan
**/
public class FaasEntry extends AbstractEntry {
@Override
public JSONObject execute(FaasInputs faasInputs, Context context) {
context.getLogger().info("faasInputs: " + JSON.toJSONString(faasInputs));
//填充宜搭工具类的上下文, 必须调用此方法!!! 请不要删除
initYidaUtil(faasInputs);
//登录态里的钉钉userId
String userId = (String) faasInputs.getYidaContext().get("userId");
//登录态里的钉钉corpId
String corpId = (String) faasInputs.getYidaContext().get("corpId");
//业务传的实际入参(如果您配置了参数映射(也就是点击了连接器工厂里的解析Body按钮并配置了各个参数描述和映射), 那么就是业务实际参数经过参数映射处理后的值)
Map<String, Object> input = faasInputs.getInputs();
String content = (String) input.get("content");
String password = (String) input.get("password");
Integer type = Integer.parseInt(String.valueOf(input.get("type")));
/** * 在这里编写您的业务代码, 也可以将业务代码封装到其他类或方法里. */
JSONObject result = new JSONObject();
result.put("success", false);
result.put("result", "");
result.put("error", "");
if (0 == type) {
/** * 加密 */
String encryptContent = DESUtil.encrypt(content, password);
System.out.println("加密后的字符串:" + encryptContent);
if (StringUtils.isEmpty(encryptContent)) {
result.put("error", "empty string got!");
return result;
}
result.put("result", encryptContent);
result.put("success", true);
} else {
/** * 解密 */
String encryptContent = DESUtil.decrypt(content, password);
System.out.println("解密后的字符串:" + encryptContent);
if (StringUtils.isEmpty(encryptContent)) {
result.put("error", "empty string got!");
return result;
}
result.put("result", encryptContent);
result.put("success", true);
}
System.out.println("返回:" + JSON.toJSONString(result));
return result;
/**
* 示例1, 在doYourBusiness方法里编写您的业务代码, 也可以将业务代码封装到其他Class源文件或方法里, cloudIDE和您的本地IDE基本无区别。
*/
// JSONObject result = new JSONObject();
// try {
// Object businessResult = doYourBusiness(input);
// result.put("success",true);
// result.put("result",businessResult);
// result.put("error","");
// return result;
// } catch (Exception e) {
// result.put("success",false);
// result.put("result",null);
// result.put("error35555",e.getMessage());
// return result;
// }
}
/**
* 将相关参数存到宜搭工具类里, 必须要调用此方法!!! 请不要删除!!!
*
* @param faasInputs
*/
private static final void initYidaUtil(FaasInputs faasInputs){
/**
* 用于调用钉钉开放平台OpenAPI的accessToken, 宜搭提供的, 仅申请了钉钉开放平台的部分OpenAPI的调用权限
* 如果此accessToken不满足您的需求,可在钉钉开放平台创建您自己的钉钉应用并获取appKey和APPSecret并使用com.alibaba.work.faas.util.DingOpenApiUtil获取您自己的customAccessToken
*
* @see com.alibaba.work.faas.util.DingOpenApiUtil#getCustomAccessTokenThenCache(String,String)
*/
String accessToken = (String) faasInputs.getYidaContext().get("accessToken");
// 设置钉开放平台访问token, 后续无需再设置
DingOpenApiUtil.setAccessToken(accessToken);
// try {
// //调用该方法就会自动存储customAccessToken, 之后请不要调用DingOpenApiUtil.setAccessToken(accessToken)将返回的customAccessToken覆盖宜搭传入的accessToken;
// DingOpenApiUtil.getCustomAccessTokenThenCache("您的钉钉应用appKey", "您的钉钉应用appSecret");
// } catch (Exception e) {
// System.out.println("getCustomAccessTokenThenCache error:"+e.getMessage());
// }
/**
*调用宜搭连接器依赖consumeCode
*/
String consumeCode = (String)faasInputs.getYidaContext().get("consumeCode");
//设置连接器消费码, 后续无需再设置
YidaConnectorUtil.setConsumeCode(consumeCode);
}
// /**
// * 可以将您的业务代码放在这里
// *
// * @param input
// * @return
// * @throws Exception
// */
private Object doYourBusiness(Map<String,Object> input) throws Exception{
//取实际的入参
String content = (String)input.get("content");
String password = (String)input.get("password");
Integer type = Integer.parseInt(String.valueOf(input.get("type")));
// //业务处理
// /**
// *在这里编写您的业务代码, 也可以将业务代码封装到其他类或方法里.
// */
JSONObject result = new JSONObject();
result.put("success",false);
result.put("result","");
result.put("error","");
if (0 == type) {
/**
* 加密
*/
String encryptContent = DESUtil.encrypt(content, password);
System.out.println("加密后的字符串:" + encryptContent);
if (StringUtils.isEmpty(encryptContent)) {
result.put("error", "empty string got!");
return result;
}
result.put("result", encryptContent);
result.put("success", true);
}
else {
/**
* 解密
*/
String encryptContent = DESUtil.decrypt(content, password);
System.out.println("解密后的字符串:" + encryptContent);
if (StringUtils.isEmpty(encryptContent)) {
result.put("error", "empty string got!");
return result;
}
result.put("result", encryptContent);
result.put("success", true);
}
System.out.println("返回:" + JSON.toJSONString(result));
return result.get("result");
}
/**
* 示例 调用钉钉官方连接器(待办连接器, 创建待办)
*
* @param faasInputs
* @return
* @throws Exception
*/
private Object invokeYidaConnector(FaasInputs faasInputs) throws Exception {
Map<String,Object> input = faasInputs.getInputs();
String userId = (String)faasInputs.getYidaContext().get("userId");
String corpId = (String)faasInputs.getYidaContext().get("corpId");
JSONObject connectorActionInputs = new JSONObject();
//注意: http连接器的入参是body,query等, 钉钉官方连接器则不是, 请参考宜搭帮助文档 https://www.yuque.com/yida/support/stbfik
{
connectorActionInputs.put("unionId",Arrays.asList(userId));
connectorActionInputs.put("subject",(String)input.get("title"));
connectorActionInputs.put("creatorId",Arrays.asList(userId));
connectorActionInputs.put("description","Faas连接器里调用钉钉官方连接器创建待办");
connectorActionInputs.put("dueTime",System.currentTimeMillis()+600*1000);
connectorActionInputs.put("priority",10L);
}
//请确保调用前设置了consumeCode
//更多钉钉官方连接器ID和动作ID及出入参请参照 https://www.yuque.com/yida/support/stbfik#Mv0dK (如果目标段落不存在, 请访问 https://www.yuque.com/yida/support/stbfik)
YidaResponse response = YidaConnectorUtil.invokeService("G-CONN-1016B8AEBED50B01B8D00009","G-ACT-1016B8B1911A0B01B8D0000I", ConnectorTypeEnum.DING_INNER_CONNECTOR,null,connectorActionInputs);
if (Objects.nonNull(response) && response.isSuccess()){
try {
return YidaConnectorUtil.extractYidaConnectorExecutionResult(response);
} catch (Exception e) {
throw new Exception(e.getMessage());
}
}else {
throw new Exception(Objects.isNull(response)?"执行宜搭连接器失败":response.getErrorCode() +" "+response.getErrorMsg());
}
}
/**
* 示例 批量创建宜搭表单实例
*
* @return
* @throws Exception
*/
private List<String> invokeDingOpenApi() throws Exception {
BatchSaveFormDataRequest request = new BatchSaveFormDataRequest();
request.setAsynchronousExecution(true);
request.setKeepRunningAfterException(true);
request.setNoExecuteExpression(true);
request.setAppType("宜搭应用编码");
request.setUserId("钉钉userId");
request.setSystemToken("宜搭应用systemToken");
request.setFormUuid("表单编码");
JSONObject formData = new JSONObject();
formData.put("表单组件1的ID", "表单组件1的值");
formData.put("表单组件2的ID", "表单组件2的值");
//批量创建200条
request.setFormDataJsonList(Collections.nCopies(200,formData.toJSONString()));
return DingOpenApiUtil.batchSaveFormData(request);
}
}
说明:这个是入口,相当于是接口。获取参数并解析即可。
二、页面步骤介绍
1、没啥,不用看。 直接看授权信息查看页
说明: 新建流程,因为这个需要在填写完敏感信息和密钥后,首先回触发 这个流程,直接加密信息。
2、进入页面
说明:这里直接关联表单——存档页,然后设置筛选条件,数据填充信息。
说明:这里要选择高级,始终提交。
3、流程图:
这个和刚才那个差不多,条件类型不同。
发送消息通知给自己,即可。
整体大致是这样,希望可以帮助到你。文章来源:https://www.toymoban.com/news/detail-686398.html
如果有问题,欢迎留言。文章来源地址https://www.toymoban.com/news/detail-686398.html
到了这里,关于宜搭低代码开发师(高级)「FaaS连接器加解密系统」操作步骤(亲测OK)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!