保存后->前往云IDE开发
在util目录中新增DESUtil.java文件
内容
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 = "我是6";
// String key = "wang!@#$%";
// 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) {
if (StringUtils.isEmpty(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) {
if (StringUtils.isEmpty(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.java文件中修改以下内容
package com.alibaba.work.faas;
import java.util.Map;
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.DingOpenApiUtil;
import com.alibaba.work.faas.util.YidaConnectorUtil;
import com.alibaba.work.faas.util.DESUtil;
import org.apache.commons.lang3.StringUtils;
/**
* 您的业务逻辑请从此类开始
*
* @Date 2023/09/21 11:16 AM
* @Description 宜搭Faas连接器函数入口,FC handler:com.alibaba.work.faas.FaasEntry::handleRequest
* @Version 2.0
* @Author bufan
*
**/
public class FaasEntry extends AbstractEntry {
@Override
public JSONObject execute(FaasInputs faasInputs) {
System.out.println("faasInputs: " + JSON.toJSONString(faasInputs));
//填充宜搭工具类的上下文, 必须调用此方法!!! 请不要删除
initYidaUtil(faasInputs);
//业务传的实际入参(如果您配置了参数映射(也就是点击了连接器工厂里的解析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 (type ==0) {
/**
* 加密
*/
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 if(type == 1) {
/**
* 解密
*/
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;
}
/**
* 将相关参数存到宜搭工具类里, 必须要调用此方法!!! 请不要删除!!!
*
* @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);
}
}
保存后
新增Terminal窗口
输入./builder.sh 回车 一直到编译完成!
在左上方 部署代码 按钮点击一下
再回到连接器工厂中进行测试
result 返回值是加密后,说明这个Faas连接器制作完成
调用方法:
授权查看页中
再后测试的结果如下: