【短信模板占位符替换】

短信模板占位符替换

使用java.util.regex.Matcher类中的group根据正则找出模板占位符后,进行替换,再以此将文本拼接起来。

package com.iflytek.service.modular.auth.common.utils;

import org.apache.commons.lang3.StringUtils;

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author xyding6
 * @Classname SmsAssembleUtil
 * @Description TODO
 * @date 2024/12/9
 */
public class SmsAssembleUtil {


    /**
     * 根据模块及类型获取短信模板并组装报文
     * @return
     */
    public static String assembleSmsContent(Map<String,String> smsModel, String msgTemplateContent) throws Exception {
        if (smsModel == null || StringUtils.isBlank(msgTemplateContent)) {
            throw new RuntimeException("找不到短信模板");
        }
        //获取短信模板内容
        //替换短信内容的自定义字段
        Pattern p = Pattern.compile("[{]([\\w]+)[}]");
        Matcher m = p.matcher(msgTemplateContent);
        StringBuffer buf = new StringBuffer();
        while (m.find()){
            m.appendReplacement(buf, StringUtils.isNotBlank(smsModel.get(m.group(1))) ? smsModel.get(m.group(1)) : "");
        }
        m.appendTail(buf);
        return buf.toString();
    }

    public static void main(String[] args) throws Exception {
        String msgTemplateContent = "尊敬的{user_name}用户,您正在进行手机号码登录操作。验证码为:{msg_code}。如非本人操作,还请忽略。五分钟内有效。";
        Map<String,String> smsModel = new HashMap<>();
        smsModel.put("user_name","艾丁");
        smsModel.put("msg_code","4399");
        String msgContent = SmsAssembleUtil.assembleSmsContent(smsModel, msgTemplateContent);
        System.out.println("msgContent = " + msgContent);
    }
}

### 集成 Nacos 实现短信验证码功能 为了在 Java 项目中通过 Nacos 实现短信验证码功能,可以按照如下方式构建应用逻辑: #### 确认环境配置 确保服务器已安装并配置好 Java 运行环境[^1]。这是启动任何基于 Java 的应用程序的前提条件。 #### 添加依赖项 除了引入必要的 Nacos 客户端 SDK 外,还需加入阿里云 SMS SDK 来支持短信发送能力。具体来说,在 `pom.xml` 文件内添加以下 Maven 依赖来获取所需库文件[^3]: ```xml <dependencies> <!-- Nacos Client --> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>2.0.3</version> </dependency> <!-- Aliyun SMS Service --> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.5.3</version> </dependency> </dependencies> ``` #### 编写业务代码 创建一个新的类用于处理短信验证请求,并在此过程中利用 Nacos 提供的服务发现机制找到目标服务实例。当接收到触发事件时(例如用户发起登录),调用阿里云 API 发送包含随机生成的一次性密码 (OTP) 至指定手机号码上: ```java import com.alibaba.fastjson.JSONObject; import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.profile.DefaultProfile; public class SmsVerification { private static final String ACCESS_KEY_ID = "your-access-key-id"; private static final String ACCESS_SECRET = "your-access-secret"; public void sendVerificationCode(String phoneNumber) throws ClientException { DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", ACCESS_KEY_ID, ACCESS_SECRET); IAcsClient client = new DefaultAcsClient(profile); SendSmsRequest request = new SendSmsRequest(); request.setPhoneNumbers(phoneNumber); request.setSignName("Your Sign Name"); request.setTemplateCode("SMS_XXXXXX"); JSONObject templateParam = new JSONObject(); int verificationCode = generateRandomCode(); // Generate a random code here. templateParam.put("code", verificationCode); request.setTemplateParam(templateParam.toJSONString()); SendSmsResponse response = client.getAcsResponse(request); System.out.println(response.getMessage()); } private int generateRandomCode() { return (int)(Math.random()*9000)+1000; // Generates a four-digit number between 1000 and 9999. } } ``` 此段代码展示了如何初始化客户端连接、设置参数以及执行实际的消息传递过程。注意替换占位符 `"your-access-key-id"` 和 `"your-access-secret"` 为真实的访问密钥信息;同样地,“您的签名名称”和模板 ID (`SMS_XXXXXX`) 应该对应于您在阿里云平台上申请并通过审核后的相应资源标识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值