【SpringBoot】✈️整合飞书群机器人发送消息
💥💥✈️✈️欢迎阅读本文章❤️❤️💥💥
🏆本篇文章阅读大约耗时3分钟。
⛳️motto:不积跬步、无以千里
📋📋📋本文目录如下:🎁🎁🎁
目录
前言
账号创建
代码实现
1、添加配置
2、测试接口
安全校验
章末
前言
小伙伴们大家好,上篇文章是简单实现了常见的图形验证码的使用,文章链接如下:
【验证码】⭐️集成图形验证码实现安全校验-CSDN博客
这篇文章来看下,如何整合飞书的群机器人发送自定义消息,一切从简(摆烂 bushi )
账号创建
本地是在电脑端,点击左上角的加号,选择创建群组,之后在对应群组页面的右上角打开设置,点击群机器人,添加机器人,选择下面这一个即可
点击创建机器人后可以获取到对应的 webhook 地址
代码实现
1、添加配置
将 webhook 加到配置文件中,然后用配置类来读取,将配置类交由 spring 管理
ext: larkBotConfig: webhookUrl: https://open.feishu.cn/open-apis/bot/v2/hook/3e2c19d1-8fdd-4b56-b147-b613e90064a5
import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; /** * * @author benbenhuang * @date 2025/5/18 21:13 */ @Configuration @ConfigurationProperties(prefix = "ext") @Data public class ExtProperties { private final LarkBotConfig larkBotConfig = new LarkBotConfig(); @Data public static class LarkBotConfig{ private String webhookUrl; } }
2、测试接口
将需要发送的消息,传递给接口,测试下 效果如下:
import cn.hutool.http.HttpRequest; import com.alibaba.fastjson.JSON; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.nio.charset.StandardCharsets; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.util.Base64; import java.util.HashMap; import java.util.Map; /** * @author benbenhuang * @date 2025年05月18日 19:28 */ @RequestMapping("/testLark") @RestController @Slf4j public class LarkController { @Autowired private ExtProperties extProperties; @PostMapping("/send") public void sendLark(@RequestParam("notice") String notice){ send(notice); } private void send(String notice){ try { Map header=new HashMap(); Map text=new HashMap(); text.put("text", notice); header.put("msg_type", "text"); header.put("content", text); //发送post请求 String result = HttpRequest.post(extProperties.getLarkBotConfig().getWebhookUrl()).body(JSON.toJSONString(header), "application/json;charset=UTF-8").execute().body(); log.info("lark resp:{}", result); } catch (Exception e) { log.error("lark发送消息异常", e); } } }
安全校验
1、上面的方式是没有加权限校验的实现,也就是说只要获取到 webhook 链接,谁都可以向这个群里发送消息,针对此情况可以开启群机器人的 权限校验,从这里开启,获取到秘钥之后,点击保存即可
2、调整配置
加入秘钥配置:
3、测试接口
安全校验具体到代码层面就是,请求参数中根据官方文档中要求的时间戳和加密后的sign值
自定义机器人使用指南 - 开发指南 - 飞书开放平台
@RequestMapping("/teatLark") @RestController @Slf4j public class LarkController { @Autowired private ExtProperties extProperties; @PostMapping("/sendWithToken") public void sendLarkWithToken(@RequestParam("notice") String notice){ sendWithSignature(notice); } private void sendWithSignature(String notice) { String secret = extProperties.getLarkBotConfig().getSecret(); // 从 Lark 后台获取 String timestamp = String.valueOf(System.currentTimeMillis() / 1000); // 当前时间戳,单位秒 String sign = calculateSignature(timestamp, secret); try { Map json=new HashMap(); Map text=new HashMap(); text.put("text", notice); json.put("msg_type", "text"); json.put("content", text); json.put("timestamp", timestamp); json.put("sign", sign); //发送post请求 String result = HttpRequest.post(extProperties.getLarkBotConfig().getWebhookUrl()).body(JSON.toJSONString(json), "application/json;charset=UTF-8").execute().body(); log.info("lark resp:{}", result); } catch (Exception e) { log.error("lark发送消息异常", e); } } private static String calculateSignature(String timestamp, String secret) { try { //把timestamp+"\n"+密钥当做签名字符串 String stringToSign = timestamp + "\n" + secret; //使用HmacSHA256算法计算签名 Mac mac = Mac.getInstance("HmacSHA256"); mac.init(new SecretKeySpec(stringToSign.getBytes(StandardCharsets.UTF_8), "HmacSHA256")); byte[] signData = mac.doFinal(new byte[]{}); return new String(Base64.getEncoder().encodeToString(signData)); } catch (Exception e) { throw new RuntimeException("sign 计算异常"); } } }
章末
文章到这里就结束了~
往期推荐 > > >
【服务器搭建】✈️用自己电脑搭建一个服务器!
【IDEA】✈️自定义模板,自动生成类和方法注释
【日志链路】⭐️SpringBoot 整合 TraceId 日志链路追踪!