From b628c9b0271b33f68f6e743ef415ce5fbc47f6ca Mon Sep 17 00:00:00 2001 From: 疯狂的狮子Li <15040126243@163.com> Date: 星期四, 18 一月 2024 18:33:47 +0800 Subject: [PATCH] update sms4j 2.2.0 => 3.1.1 大升级 支持自定义配置key 可用于多厂商多租户等 --- ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/config/SmsAutoConfiguration.java | 18 ++ ruoyi-admin/src/main/resources/application-prod.yml | 53 +++++---- ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/SmsController.java | 32 +++++ ruoyi-common/ruoyi-common-sms/pom.xml | 13 +- ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/core/dao/PlusSmsDao.java | 72 ++++++++++++++ ruoyi-admin/src/main/java/org/dromara/web/controller/CaptchaController.java | 13 +- pom.xml | 2 ruoyi-admin/src/main/resources/application-dev.yml | 53 +++++---- 8 files changed, 185 insertions(+), 71 deletions(-) diff --git a/pom.xml b/pom.xml index 931097c..c7d86f0 100644 --- a/pom.xml +++ b/pom.xml @@ -47,7 +47,7 @@ <aws.sdk.version>2.23.0</aws.sdk.version> <aws.crt.version>0.29.6</aws.crt.version> <!-- SMS 閰嶇疆 --> - <sms4j.version>2.2.0</sms4j.version> + <sms4j.version>3.1.1</sms4j.version> <!-- 闄愬埗妗嗘灦涓殑fastjson鐗堟湰 --> <fastjson.version>1.2.83</fastjson.version> diff --git a/ruoyi-admin/src/main/java/org/dromara/web/controller/CaptchaController.java b/ruoyi-admin/src/main/java/org/dromara/web/controller/CaptchaController.java index ef33f5b..87844dd 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/controller/CaptchaController.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/controller/CaptchaController.java @@ -5,6 +5,9 @@ import cn.hutool.captcha.generator.CodeGenerator; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.RandomUtil; +import jakarta.validation.constraints.NotBlank; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.constant.Constants; import org.dromara.common.core.constant.GlobalConstants; import org.dromara.common.core.domain.R; @@ -21,11 +24,7 @@ import org.dromara.sms4j.api.SmsBlend; import org.dromara.sms4j.api.entity.SmsResponse; import org.dromara.sms4j.core.factory.SmsFactory; -import org.dromara.sms4j.provider.enumerate.SupplierType; import org.dromara.web.domain.vo.CaptchaVo; -import jakarta.validation.constraints.NotBlank; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; import org.springframework.expression.Expression; import org.springframework.expression.ExpressionParser; import org.springframework.expression.spel.standard.SpelExpressionParser; @@ -66,11 +65,11 @@ String templateId = ""; LinkedHashMap<String, String> map = new LinkedHashMap<>(1); map.put("code", code); - SmsBlend smsBlend = SmsFactory.createSmsBlend(SupplierType.ALIBABA); + SmsBlend smsBlend = SmsFactory.getSmsBlend("config1"); SmsResponse smsResponse = smsBlend.sendMessage(phonenumber, templateId, map); - if (!"OK".equals(smsResponse.getCode())) { + if (!smsResponse.isSuccess()) { log.error("楠岃瘉鐮佺煭淇″彂閫佸紓甯� => {}", smsResponse); - return R.fail(smsResponse.getMessage()); + return R.fail(smsResponse.getData().toString()); } return R.ok(); } diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml index 4929c1b..b33943a 100644 --- a/ruoyi-admin/src/main/resources/application-dev.yml +++ b/ruoyi-admin/src/main/resources/application-dev.yml @@ -149,31 +149,36 @@ connectionTimeout: 0 --- # sms 鐭俊 鏀寔 闃块噷浜� 鑵捐浜� 浜戠墖 绛夌瓑鍚勫紡鍚勬牱鐨勭煭淇℃湇鍔″晢 -# https://wind.kim/doc/start 鏂囨。鍦板潃 鍚勪釜鍘傚晢鍙悓鏃朵娇鐢� +# https://sms4j.com/doc3/ 宸紓閰嶇疆鏂囨。鍦板潃 鏀寔鍗曞巶鍟嗗閰嶇疆锛屽彲浠ラ厤缃涓悓鏃朵娇鐢� sms: - # 闃块噷浜� dysmsapi.aliyuncs.com - alibaba: - #璇锋眰鍦板潃 榛樿涓� dysmsapi.aliyuncs.com 濡傛棤鐗规畩鏀瑰彉鍙互涓嶇敤璁剧疆 - requestUrl: dysmsapi.aliyuncs.com - #闃块噷浜戠殑accessKey - accessKeyId: xxxxxxx - #闃块噷浜戠殑accessKeySecret - accessKeySecret: xxxxxxx - #鐭俊绛惧悕 - signature: 娴嬭瘯 - tencent: - #璇锋眰鍦板潃榛樿涓� sms.tencentcloudapi.com 濡傛棤鐗规畩鏀瑰彉鍙笉鐢ㄨ缃� - requestUrl: sms.tencentcloudapi.com - #鑵捐浜戠殑accessKey - accessKeyId: xxxxxxx - #鑵捐浜戠殑accessKeySecret - accessKeySecret: xxxxxxx - #鐭俊绛惧悕 - signature: 娴嬭瘯 - #鐭俊sdkAppId - sdkAppId: appid - #鍦板煙淇℃伅榛樿涓� ap-guangzhou 濡傛棤鐗规畩鏀瑰彉鍙笉鐢ㄨ缃� - territory: ap-guangzhou + # 閰嶇疆婧愮被鍨嬬敤浜庢爣瀹氶厤缃潵婧�(interface,yaml) + config-type: yaml + # 鐢ㄤ簬鏍囧畾yml涓殑閰嶇疆鏄惁寮�鍚煭淇℃嫤鎴紝鎺ュ彛閰嶇疆涓嶅彈姝ら檺鍒� + restricted: true + # 鐭俊鎷︽埅闄愬埗鍗曟墜鏈哄彿姣忓垎閽熸渶澶у彂閫侊紝鍙寮�鍚簡鎷︽埅鐨勯厤缃湁鏁� + minute-max: 1 + # 鐭俊鎷︽埅闄愬埗鍗曟墜鏈哄彿姣忔棩鏈�澶у彂閫侀噺锛屽彧瀵瑰紑鍚簡鎷︽埅鐨勯厤缃湁鏁� + account-max: 30 + # 浠ヤ笅閰嶇疆鏉ヨ嚜浜� org.dromara.sms4j.provider.config.BaseConfig绫讳腑 + blends: + # 鍞竴ID 鐢ㄤ簬鍙戦�佺煭淇″鎵惧叿浣撻厤缃� 闅忎究瀹氫箟鍒敤涓枃鍗冲彲 + # 鍙互鍚屾椂瀛樺湪涓や釜鐩稿悓鍘傚晢 渚嬪: ali1 ali2 涓や釜涓嶅悓鐨勯樋閲岀煭淇¤处鍙� 涔熷彲鐢ㄤ簬鍖哄垎绉熸埛 + config1: + # 妗嗘灦瀹氫箟鐨勫巶鍟嗗悕绉版爣璇嗭紝鏍囧畾姝ら厤缃槸鍝釜鍘傚晢锛岃缁嗚鐪嬪巶鍟嗘爣璇嗕粙缁嶉儴鍒� + supplier: alibaba + # 鏈変簺绉颁负accessKey鏈変簺绉颁箣涓篴piKey锛屼篃鏈夌О涓簊dkKey鎴栬�卆ppId銆� + access-key-id: 鎮ㄧ殑accessKey + # 绉颁负accessSecret鏈変簺绉颁箣涓篴piSecret + access-key-secret: 鎮ㄧ殑accessKeySecret + signature: 鎮ㄧ殑鐭俊绛惧悕 + sdk-app-id: 鎮ㄧ殑sdkAppId + config2: + # 鍘傚晢鏍囪瘑锛屾爣瀹氭閰嶇疆鏄摢涓巶鍟嗭紝璇︾粏璇风湅鍘傚晢鏍囪瘑浠嬬粛閮ㄥ垎 + supplier: tencent + access-key-id: 鎮ㄧ殑accessKey + access-key-secret: 鎮ㄧ殑accessKeySecret + signature: 鎮ㄧ殑鐭俊绛惧悕 + sdk-app-id: 鎮ㄧ殑sdkAppId --- # 涓夋柟鎺堟潈 diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml index 782a680..faecb76 100644 --- a/ruoyi-admin/src/main/resources/application-prod.yml +++ b/ruoyi-admin/src/main/resources/application-prod.yml @@ -152,31 +152,36 @@ connectionTimeout: 0 --- # sms 鐭俊 鏀寔 闃块噷浜� 鑵捐浜� 浜戠墖 绛夌瓑鍚勫紡鍚勬牱鐨勭煭淇℃湇鍔″晢 -# https://wind.kim/doc/start 鏂囨。鍦板潃 鍚勪釜鍘傚晢鍙悓鏃朵娇鐢� +# https://sms4j.com/doc3/ 宸紓閰嶇疆鏂囨。鍦板潃 鏀寔鍗曞巶鍟嗗閰嶇疆锛屽彲浠ラ厤缃涓悓鏃朵娇鐢� sms: - # 闃块噷浜� dysmsapi.aliyuncs.com - alibaba: - #璇锋眰鍦板潃 榛樿涓� dysmsapi.aliyuncs.com 濡傛棤鐗规畩鏀瑰彉鍙互涓嶇敤璁剧疆 - requestUrl: dysmsapi.aliyuncs.com - #闃块噷浜戠殑accessKey - accessKeyId: xxxxxxx - #闃块噷浜戠殑accessKeySecret - accessKeySecret: xxxxxxx - #鐭俊绛惧悕 - signature: 娴嬭瘯 - tencent: - #璇锋眰鍦板潃榛樿涓� sms.tencentcloudapi.com 濡傛棤鐗规畩鏀瑰彉鍙笉鐢ㄨ缃� - requestUrl: sms.tencentcloudapi.com - #鑵捐浜戠殑accessKey - accessKeyId: xxxxxxx - #鑵捐浜戠殑accessKeySecret - accessKeySecret: xxxxxxx - #鐭俊绛惧悕 - signature: 娴嬭瘯 - #鐭俊sdkAppId - sdkAppId: appid - #鍦板煙淇℃伅榛樿涓� ap-guangzhou 濡傛棤鐗规畩鏀瑰彉鍙笉鐢ㄨ缃� - territory: ap-guangzhou + # 閰嶇疆婧愮被鍨嬬敤浜庢爣瀹氶厤缃潵婧�(interface,yaml) + config-type: yaml + # 鐢ㄤ簬鏍囧畾yml涓殑閰嶇疆鏄惁寮�鍚煭淇℃嫤鎴紝鎺ュ彛閰嶇疆涓嶅彈姝ら檺鍒� + restricted: true + # 鐭俊鎷︽埅闄愬埗鍗曟墜鏈哄彿姣忓垎閽熸渶澶у彂閫侊紝鍙寮�鍚簡鎷︽埅鐨勯厤缃湁鏁� + minute-max: 1 + # 鐭俊鎷︽埅闄愬埗鍗曟墜鏈哄彿姣忔棩鏈�澶у彂閫侀噺锛屽彧瀵瑰紑鍚簡鎷︽埅鐨勯厤缃湁鏁� + account-max: 30 + # 浠ヤ笅閰嶇疆鏉ヨ嚜浜� org.dromara.sms4j.provider.config.BaseConfig绫讳腑 + blends: + # 鍞竴ID 鐢ㄤ簬鍙戦�佺煭淇″鎵惧叿浣撻厤缃� 闅忎究瀹氫箟鍒敤涓枃鍗冲彲 + # 鍙互鍚屾椂瀛樺湪涓や釜鐩稿悓鍘傚晢 渚嬪: ali1 ali2 涓や釜涓嶅悓鐨勯樋閲岀煭淇¤处鍙� 涔熷彲鐢ㄤ簬鍖哄垎绉熸埛 + config1: + # 妗嗘灦瀹氫箟鐨勫巶鍟嗗悕绉版爣璇嗭紝鏍囧畾姝ら厤缃槸鍝釜鍘傚晢锛岃缁嗚鐪嬪巶鍟嗘爣璇嗕粙缁嶉儴鍒� + supplier: alibaba + # 鏈変簺绉颁负accessKey鏈変簺绉颁箣涓篴piKey锛屼篃鏈夌О涓簊dkKey鎴栬�卆ppId銆� + access-key-id: 鎮ㄧ殑accessKey + # 绉颁负accessSecret鏈変簺绉颁箣涓篴piSecret + access-key-secret: 鎮ㄧ殑accessKeySecret + signature: 鎮ㄧ殑鐭俊绛惧悕 + sdk-app-id: 鎮ㄧ殑sdkAppId + config2: + # 鍘傚晢鏍囪瘑锛屾爣瀹氭閰嶇疆鏄摢涓巶鍟嗭紝璇︾粏璇风湅鍘傚晢鏍囪瘑浠嬬粛閮ㄥ垎 + supplier: tencent + access-key-id: 鎮ㄧ殑accessKey + access-key-secret: 鎮ㄧ殑accessKeySecret + signature: 鎮ㄧ殑鐭俊绛惧悕 + sdk-app-id: 鎮ㄧ殑sdkAppId --- # 涓夋柟鎺堟潈 justauth: diff --git a/ruoyi-common/ruoyi-common-sms/pom.xml b/ruoyi-common/ruoyi-common-sms/pom.xml index c50f222..932cb9d 100644 --- a/ruoyi-common/ruoyi-common-sms/pom.xml +++ b/ruoyi-common/ruoyi-common-sms/pom.xml @@ -20,13 +20,12 @@ <dependency> <groupId>org.dromara.sms4j</groupId> <artifactId>sms4j-spring-boot-starter</artifactId> - <exclusions> - <!-- 鎺掗櫎浜笢鐭俊鍐呭瓨鍦ㄧ殑fastjson绛夊緟浣滆�呭悗缁慨澶� --> - <exclusion> - <groupId>com.alibaba</groupId> - <artifactId>fastjson</artifactId> - </exclusion> - </exclusions> + </dependency> + + <!-- RuoYi Common Redis--> + <dependency> + <groupId>org.dromara</groupId> + <artifactId>ruoyi-common-redis</artifactId> </dependency> </dependencies> diff --git a/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/config/SmsAutoConfiguration.java b/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/config/SmsAutoConfiguration.java index 29f60fc..1e88407 100644 --- a/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/config/SmsAutoConfiguration.java +++ b/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/config/SmsAutoConfiguration.java @@ -1,14 +1,24 @@ package org.dromara.common.sms.config; +import org.dromara.common.sms.core.dao.PlusSmsDao; +import org.dromara.sms4j.api.dao.SmsDao; import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Primary; /** - * 鐭俊閰嶇疆绫�(鏆傛椂娌$敤 棰勭暀鎵╁睍) + * 鐭俊閰嶇疆绫� * - * @author Lion Li - * @version 4.2.0 + * @author Feng */ -@AutoConfiguration +@AutoConfiguration(after = {RedisAutoConfiguration.class}) public class SmsAutoConfiguration { + @Primary + @Bean + public SmsDao smsDao() { + return new PlusSmsDao(); + } + } diff --git a/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/core/dao/PlusSmsDao.java b/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/core/dao/PlusSmsDao.java new file mode 100644 index 0000000..91d8d24 --- /dev/null +++ b/ruoyi-common/ruoyi-common-sms/src/main/java/org/dromara/common/sms/core/dao/PlusSmsDao.java @@ -0,0 +1,72 @@ +package org.dromara.common.sms.core.dao; + +import org.dromara.common.core.constant.GlobalConstants; +import org.dromara.common.redis.utils.RedisUtils; +import org.dromara.sms4j.api.dao.SmsDao; + +import java.time.Duration; + +/** + * SmsDao缂撳瓨閰嶇疆 (浣跨敤妗嗘灦鑷甫RedisUtils瀹炵幇 鍗忚缁熶竴) + * <p>涓昏鐢ㄤ簬鐭俊閲嶈瘯鍜屾嫤鎴殑缂撳瓨 + * + * @author Feng + */ +public class PlusSmsDao implements SmsDao { + + /** + * 瀛樺偍 + * + * @param key 閿� + * @param value 鍊� + * @param cacheTime 缂撳瓨鏃堕棿锛堝崟浣嶏細绉�) + */ + @Override + public void set(String key, Object value, long cacheTime) { + RedisUtils.setCacheObject(GlobalConstants.GLOBAL_REDIS_KEY + key, value, Duration.ofSeconds(cacheTime)); + } + + /** + * 瀛樺偍 + * + * @param key 閿� + * @param value 鍊� + */ + @Override + public void set(String key, Object value) { + RedisUtils.setCacheObject(GlobalConstants.GLOBAL_REDIS_KEY + key, value, true); + } + + /** + * 璇诲彇 + * + * @param key 閿� + * @return 鍊� + */ + @Override + public Object get(String key) { + return RedisUtils.getCacheObject(GlobalConstants.GLOBAL_REDIS_KEY + key); + } + + /** + * remove + * <p> 鏍规嵁key绉婚櫎缂撳瓨 + * + * @param key 缂撳瓨閿� + * @return 琚垹闄ょ殑value + * @author :Wind + */ + @Override + public Object remove(String key) { + return RedisUtils.deleteObject(GlobalConstants.GLOBAL_REDIS_KEY + key); + } + + /** + * 娓呯┖ + */ + @Override + public void clean() { + RedisUtils.deleteObject(GlobalConstants.GLOBAL_REDIS_KEY + "sms:"); + } + +} diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/SmsController.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/SmsController.java index fb19731..d28586d 100644 --- a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/SmsController.java +++ b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/SmsController.java @@ -1,11 +1,11 @@ package org.dromara.demo.controller; +import cn.dev33.satoken.annotation.SaIgnore; import lombok.RequiredArgsConstructor; import org.dromara.common.core.domain.R; import org.dromara.sms4j.api.SmsBlend; import org.dromara.sms4j.api.entity.SmsResponse; import org.dromara.sms4j.core.factory.SmsFactory; -import org.dromara.sms4j.provider.enumerate.SupplierType; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -20,12 +20,12 @@ * @author Lion Li * @version 4.2.0 */ +@SaIgnore @Validated @RequiredArgsConstructor @RestController @RequestMapping("/demo/sms") public class SmsController { - /** * 鍙戦�佺煭淇liyun * @@ -36,7 +36,7 @@ public R<Object> sendAliyun(String phones, String templateId) { LinkedHashMap<String, String> map = new LinkedHashMap<>(1); map.put("code", "1234"); - SmsBlend smsBlend = SmsFactory.createSmsBlend(SupplierType.ALIBABA); + SmsBlend smsBlend = SmsFactory.getSmsBlend("config1"); SmsResponse smsResponse = smsBlend.sendMessage(phones, templateId, map); return R.ok(smsResponse); } @@ -52,9 +52,33 @@ LinkedHashMap<String, String> map = new LinkedHashMap<>(1); // map.put("2", "娴嬭瘯娴嬭瘯"); map.put("1", "1234"); - SmsBlend smsBlend = SmsFactory.createSmsBlend(SupplierType.TENCENT); + SmsBlend smsBlend = SmsFactory.getSmsBlend("config2"); SmsResponse smsResponse = smsBlend.sendMessage(phones, templateId, map); return R.ok(smsResponse); } + /** + * 娣诲姞榛戝悕鍗� + * + * @param phone 鎵嬫満鍙� + */ + @GetMapping("/addBlacklist") + public R<Object> addBlacklist(String phone){ + SmsBlend smsBlend = SmsFactory.getSmsBlend("config1"); + smsBlend.joinInBlacklist(phone); + return R.ok(); + } + + /** + * 绉婚櫎榛戝悕鍗� + * + * @param phone 鎵嬫満鍙� + */ + @GetMapping("/removeBlacklist") + public R<Object> removeBlacklist(String phone){ + SmsBlend smsBlend = SmsFactory.getSmsBlend("config1"); + smsBlend.removeFromBlacklist(phone); + return R.ok(); + } + } -- Gitblit v1.9.3