宜搭低代码开发高级认证例题2-Faas连接器功能

保存后->前往云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连接器制作完成

调用方法:

授权查看页中

再后测试的结果如下:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值