【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();@Datapublic 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 {@Autowiredprivate ExtProperties extProperties;@PostMapping("/send")public void sendLark(@RequestParam("notice") String notice){send(notice);}private void send(String notice){try {Map<String,Object> header=new HashMap();Map<String,Object> 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 {@Autowiredprivate 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<String,Object> json=new HashMap();Map<String,Object> 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 日志鏈路追蹤!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/81606.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/81606.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/81606.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

我的多條件查詢

背景&#xff1a;2個表&#xff0c;是一對多的關系&#xff0c;一個實時視頻幀可以出現多個檢測結果 要求&#xff0c;可以根據&#xff0c;ids&#xff0c;起始時間&#xff0c;識別出的鳥的種類&#xff0c;來進行刪除。 出現的問題&#xff0c; 一致性沒有實現&#xff1a…

關于網站提交搜索引擎

發布于Eucalyptus-blog 一、前言 將網站提交給搜索引擎是為了讓搜索引擎更早地了解、索引和顯示您的網站內容。以下是一些提交網站給搜索引擎的理由&#xff1a; 提高可見性&#xff1a;通過將您的網站提交給搜索引擎&#xff0c;可以提高您的網站在搜索結果中出現的機會。當用…

【Oracle專欄】擴容導致數據文件 dbf 丟失,實操

Oracle相關文檔,希望互相學習,共同進步 風123456789~-CSDN博客 1.背景 同事檢查擴容情況,發現客戶擴容后數據盤后,盤中原有文件丟失,再檢查發現數據庫沒有啟動。通過檢查發現數據盤中丟失的是oracle的 dbf 表空間文件。數據庫無法啟動。 檢查情況:1)沒有rman備份 …

負載均衡—會話保持技術詳解

一、會話保持的定義 會話保持&#xff08;Session Persistence&#xff09;是一種負載均衡策略&#xff0c;其核心機制是確保來自同一客戶端的連續請求&#xff0c;在特定周期內被定向到同一臺后端服務器進行處理。這種機制通過記錄和識別客戶端的特定標識信息&#xff0c;打破…

CSRF攻擊 + 觀測iframe加載時間利用時間響應差異側信道攻擊 -- reelfreaks DefCamp 2024

參考: https://0x90r00t.com/2024/09/30/3708/ 題目信息 有些事情最好還是保持低調。當然&#xff0c;除非你是個真正的怪胎。 注意&#xff1a;該網站通過HTTPS提供服務 標志格式&#xff1a;DCTF&#xff5b;&#xff5d;題目實現了一個類似視頻網站的東西 在其提供的數據庫中…

JS逆向-某易云音樂下載器

文章目錄 介紹下載鏈接Robots文件搜索功能JS逆向**函數a&#xff1a;生成隨機字符串****函數b&#xff1a;AES-CBC加密****函數c&#xff1a;RSA公鑰加密** 歌曲下載總結 介紹 在某易云音樂中&#xff0c;很多歌曲聽是免費的&#xff0c;但下載需要VIP&#xff0c;此程序旨在“…

黑馬k8s(十)

1.Pod生命周期-鉤子函數 2.Pod生命周期-容器探測 因為沒有hello.txt文件 查看詳情&#xff1a; 修改為查看命令&#xff1a; 查看一下詳情&#xff1a; 因為只有一個80端口&#xff0c;沒有8080&#xff0c;所以會重啟 查看詳情&#xff1a; 修改成80&#xff1a; 因為沒有…

每日算法刷題Day9 5.17:leetcode定長滑動窗口3道題,用時1h

9. 1652.拆炸彈(簡單&#xff0c;學習) 1652. 拆炸彈 - 力扣&#xff08;LeetCode&#xff09; 思想 為了獲得正確的密碼&#xff0c;你需要替換掉每一個數字。所有數字會 同時 被替換。 如果 k > 0 &#xff0c;將第 i 個數字用 接下來 k 個數字之和替換。如果 k < 0…

Java IO及Netty框架學習小結

Netty netty官網: Netty 什么是Netty&#xff1f; Netty 是 一個異步事件驅動的網絡應用程序框架&#xff0c;用于快速開發可維護的高性能協議服務器和客戶端。Netty 是一個 NIO 客戶端服務器框架&#xff0c;可以快速輕松地開發網絡應用程序&#xff08;例如協議服務器和客…

計算機網絡筆記(二十七)——4.9多協議標簽交換MPLS

4.9.1MPLS的工作原理 一、MPLS基本工作原理 MPLS&#xff08;Multiprotocol Label Switching&#xff09;是一種介于數據鏈路層和網絡層之間的轉發技術&#xff0c;通過固定長度的標簽進行高速數據轉發。其核心特點是通過預建立的標簽交換路徑&#xff08;Label Switching Pa…

AI 賦能 Copula 建模:大語言模型驅動的相關性分析革新

技術點目錄 R及Python語言及相關性研究初步二元Copula理論與實踐&#xff08;一&#xff09;二元Copula理論與實踐&#xff08;二&#xff09;【R語言為主】Copula函數的統計檢驗與選擇【R語言為主】高維數據與Vine Copula 【R語言】正則Vine Copula&#xff08;一&#xff09;…

【洛谷P3386】二分圖最大匹配之Kuhn算法/匈牙利算法:直觀理解

題目&#xff1a;洛谷P3386 【模板】二分圖最大匹配 &#x1f955; 匈牙利算法本來是針對帶權圖最大匹配的&#xff0c;這里由于題目只是求最大匹配的邊數&#xff0c;所以我們也只考慮無權的情況。 &#x1f680; 本文旨在服務于看了別的關于匈牙利算法的文章但不甚理解的童…

【數據結構】二分查找(返回插入點)5.14

二分查找基礎版 package 二分查找; public class BinarySearch { public static void main(String[] args) { // TODO Auto-generated method stub } public static int binarySearchBasic(int[] a,int target) { int i0,ja.length-1; //設置指針初值 while…

Ubuntu 命令

Ubuntu 命令速查表? ?分類??命令??功能描述??示例/常用選項????文件與目錄?ls列出目錄內容ls -a&#xff08;顯示隱藏文件&#xff09;; ls -lh&#xff08;詳細列表易讀大小&#xff09; cd切換目錄cd ~&#xff08;主目錄&#xff09;; cd ..&#xff08;上級…

Java集合框架詳解與使用場景示例

Java集合框架是Java標準庫中一組用于存儲和操作數據的接口和類。它提供了多種數據結構&#xff0c;每種數據結構都有其特定的用途和性能特點。在本文中&#xff0c;我們將詳細介紹Java集合框架的主要組成部分&#xff1a;List、Set和Queue&#xff0c;并通過代碼示例展示它們的…

《Python星球日記》 第78天:CV 基礎與圖像處理

名人說:路漫漫其修遠兮,吾將上下而求索。—— 屈原《離騷》 創作者:Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder??) 目錄 一、計算機視覺(CV)簡介1. 什么是計算機視覺?2. 計算機視覺的應用場景3. 圖像的基本屬性a》像素(Pixel)b》通道(Channel)c》分辨率(Res…

LabVIEW在電子電工教學中的應用

在電子電工教學領域&#xff0c;傳統教學模式面臨諸多挑戰&#xff0c;如實驗設備數量有限、實驗過程存在安全隱患、教學內容更新滯后等。LabVIEW 作為一款功能強大的圖形化編程軟件&#xff0c;為解決這些問題提供了創新思路&#xff0c;在電子電工教學的多個關鍵環節發揮著重…

【優選算法 | 字符串】字符串模擬題精選:思維+實現解析

算法相關知識點可以通過點擊以下鏈接進行學習一起加油&#xff01;雙指針滑動窗口二分查找前綴和位運算模擬鏈表哈希表 在眾多字符串算法題中&#xff0c;有一類題目看起來沒有太多算法技巧&#xff0c;卻經常讓人“翻車”——那就是字符串模擬題。這類題型往往不依賴復雜的數據…

虛幻引擎5-Unreal Engine筆記之Default Pawn與GamMode、Camera的關系

虛幻引擎5-Unreal Engine筆記之Default Pawn與GamMode、Camera的關系 code review! 文章目錄 虛幻引擎5-Unreal Engine筆記之Default Pawn與GamMode、Camera的關系1.Default Pawn與Camera的關系1.1. Default Pawn 是什么&#xff1f;1.2. Default Pawn 的主要組件1.3. Default…

HarmonyOs開發之———UIAbility進階

謝謝關注!! 前言:上一篇文章主要介紹開發之———使用HTTP訪問網絡資源:HarmonyOs開發之———使用HTTP訪問網絡資源-CSDN博客 代碼資源:https://download.csdn.net/download/this_is_bug/90841580 一、基本概念 UIAbility 是 HarmonyOS 應用的核心組件,負責用戶界面的…