前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Blog接入腾讯云短信

Blog接入腾讯云短信

作者头像
姜同学
发布于 2022-10-27 09:00:10
发布于 2022-10-27 09:00:10
8.6K00
代码可运行
举报
文章被收录于专栏:姜同学姜同学
运行总次数:0
代码可运行

这个网站搭建也快有两年了,这两年虽然没有什么产出,但是经过两年的积累也算是收益颇丰。因为一开始只是打算用来做一些笔记,并没有考虑网站本身的交互性,评论几乎都是置之不理,前几天突然心血来潮查了一下评论表,居然收获了上百条的评论,然而这些评论中的绝大多数我都是第一次见,其中不乏一些加油以及对知识点提出疑问的评论,我要在这里向留下评论的你们表示感谢。但是光是感谢是不够的,我要提高网站的交互性,对于这些评论我要第一时间知道,如何第一时间知道?想必脑海中冒出来的第一个念头就是短信了吧,打开腾讯云搜索短信,我又打开了一片新世界。

腾讯云短信平台

短信签名和短信模板被驳回了2次。。。我也是醉了,不过结果还好审核通过了,并发现了一个小惊喜,腾讯云个人认证账户每个月可以白嫖100条的免费短信,very good.点开开发者指南去学习如何引入SDK发短信就好啦,中文的文档不会还有人看不懂吧,不会吧不会吧。。

引入SDK 腾讯云短信接入文档 我把文档看完了,在这里做个小总结,首先你需要把SDK的依赖引入到工程的POM中,想要发短信的话还需要实例化一个认证对象,入参需要传入腾讯云账户密钥对 secretId 和 secretKey: 还需要实例化一个发短信的客户端:

最后还需要将短信的详细信息封装到一个对象中

最后使用短信客户端把短信的详细信息发送出去就好了吧,就这样**client.SendSms(req)**嗖的一下就发出去了。

引入依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- https://mvnrepository.com/artifact/com.tencentcloudapi/tencentcloud-sdk-java -->
<dependency>
	<groupId>com.tencentcloudapi</groupId>
	<artifactId>tencentcloud-sdk-java</artifactId>
	<version>4.0.11</version>
</dependency>

创建对象

emm,认证对象只要传入两个固定的参数就好啦非常ESAY,所以就把他交给Spring管理就好啦,这个客户端对象一个系统也有一个就可以啦,那就单例模式搞一个,emm~~短信对象创建起来有点复杂,而且要根据不同的评论进行定制,所以工厂模式安排!

注入IOC容器
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.jmy.config;

import com.jmy.factory.SmsClientBeanFactory;
import com.jmy.util.SmsUtils;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.sms.v20190711.SmsClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SmsConfig {

    @Bean
    public Credential credential(){
        return new Credential(SmsUtils.SECRETID, SmsUtils.SECRETKEY);
    }

    @Bean
    public SmsClient smsClient(Credential credential){
        return SmsClientBeanFactory.getSmsClientInstance(credential);
    }

}

单例模式创建SmsClient
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.jmy.config;

import com.jmy.factory.SmsClientBeanFactory;
import com.jmy.util.SmsUtils;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.sms.v20190711.SmsClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SmsConfig {

    @Bean
    public Credential credential(){
        return new Credential(SmsUtils.SECRETID, SmsUtils.SECRETKEY);
    }

    @Bean
    public SmsClient smsClient(Credential credential){
        return SmsClientBeanFactory.getSmsClientInstance(credential);
    }

}
工厂模式创建SendSmsRequestBeanFactory
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.jmy.factory;

import com.jmy.util.SmsUtils;
import com.tencentcloudapi.sms.v20190711.models.SendSmsRequest;

public class SendSmsRequestBeanFactory{

    public static SendSmsRequest getInstance() {
        SendSmsRequest req = new SendSmsRequest();
        req.setSmsSdkAppid(SmsUtils.APPID);
        req.setSign(SmsUtils.SIGN);
        req.setSenderId(SmsUtils.SENDERID);
        req.setTemplateID(SmsUtils.TEMPLATEID);
        req.setPhoneNumberSet(SmsUtils.PHONENUMBERS);
        return req;
    }
}

编写切面接入短信功能

评论发送短信通知博主,这功能一听就是与评论业务无关只是对评论功能单纯的一个增强,这不正是面向切面编程的意义所在吗?心动不如行动,还在有犹豫什么呢,快去编写发送短信的切面吧。

后置通知发送短信

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * Created by jmy on 2021/4/29.
 */

@Aspect
@Component
public class SmsAspect {

    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired
    private SmsClient smsClient;
    @Autowired
    private RedisTemplate<String,String> redisTemplate;

    @Pointcut("@annotation(com.jmy.aspect.SendMessage)")
    public void sendMessage(){}

    @After("sendMessage()")
    public void doAfter(JoinPoint joinPoint) {
        Object[] args = joinPoint.getArgs();
        Comment comment = (Comment) args[];

        // 发送短信
        SendSmsRequest req = SendSmsRequestBeanFactory.getInstance();
        /* 模板参数: 若无模板参数,则设置为空*/
        String title = comment.getBlog().getTitle();
        String[] templateParams = {title.length() >  ? title.substring(,):title};
        req.setTemplateParamSet(templateParams);
        HttpServletRequest request = RepeatCommentInterceptor.threadLocal.get();
        String tll = RepeatCommentInterceptor.TLL.get();
        String remoteAddr = request.getRemoteAddr();
        new Thread(() -> {
            try {
                String boo = redisTemplate.opsForValue().get("comment:ip:" + remoteAddr);
                if (!StringUtils.isEmpty(boo) && tll.equals(boo)) {
                    smsClient.SendSms(req);
                }
            } catch (TencentCloudSDKException e) {
                logger.error(e.getMessage());
            }
        }).start();

    }
}

切面写好了怎么通知到我们的评论功能呢?当然是按照我们编写好的切入规则@Pointcut(“@annotation(com.jmy.aspect.SendMessage)”),在评论的方法上加上我们自定义的SendMessage注解就好啦。

不讲武德,耗子尾汁

短信通知的功能倒是实现啦,但是我眉头一紧突然意识到一个严重的问题,如果有不讲武德的小伙子刷评论我这白嫖的100条短信不是很快就没了吗,所以要小小的改造一下加个拦截器将请求的IP地址放到Redis中保存一小段时间用来校验是否刷评论就可以了,如何在拦截器中注入Spring管理的对象以及如何在切面中如何使用Request对象,这些都是不可忽视的小细节哦.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * Created by jmy on 2021/4/30.
 * 重复评论短信拦截器
 */

public class RepeatCommentInterceptor implements HandlerInterceptor {

    public static ThreadLocal<HttpServletRequest> threadLocal = new ThreadLocal<>();
    public static ThreadLocal<String> TLL = new ThreadLocal<>();
    @Autowired
    private RedisTemplate<String,String> redisTemplate;
    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
        threadLocal.set(httpServletRequest);
        String remoteAddr = httpServletRequest.getRemoteAddr();
        String tll = UUID.randomUUID().toString();
        TLL.set(tll);
        redisTemplate.opsForValue().setIfAbsent("comment:ip:" + remoteAddr, tll);
        redisTemplate.expire("comment:ip:" + remoteAddr,,TimeUnit.MINUTES);
        return true;
    }
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * Created by jmy on 2021/4/30.
 */
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

    @Bean
    public RepeatCommentInterceptor repeatCommentInterceptor(){
        return new RepeatCommentInterceptor();
    }
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor())
                .addPathPatterns("/admin/**")
                .excludePathPatterns("/admin")
                .excludePathPatterns("/admin/login");

        registry.addInterceptor(repeatCommentInterceptor())
                .addPathPatterns("/comments");
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-06T,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
腾讯云短信服务发送验证码
  由于阿里云需要备案过的域名或者已上线的APP才能申请短信签名,我的域名正在备案,申请还没通过,这里用腾讯云实现短信验证码的发送功能。腾讯云只需要你有个公众号就能申请短信签名,而且免费赠送200条。
别团等shy哥发育
2023/02/25
8.9K0
腾讯云短信服务发送验证码
【笔记整理】SpringBoot集成腾讯云短信
前言 记录一下最近使用SpringBoot基础腾讯云里的短信产品功能的体验。 1、腾讯云申请开通短信服务。 2、配置短信内容:分别创建签名、模板和群发短信。 3、使用SpringBoot工程集成测试。
pbinlog
2022/04/18
8.3K0
轻松集成腾讯云短信服务实现短信发送(Java实现)
不论是阿里云还是腾讯云,要想在网站上实现短信发送功能,首先得保证你的网站域名是通过备案的,因为短信签名是需要用到备案过的域名截图,所以域名通过了,申请很快就会审批成功了。 (至于备案的话,需要你先购买域名和服务器,然后提交材料信息,他们那边会打电话跟你核实下基本信息,比如你申请的域名地址,这个网站用途是什么等等,然后初审通过后,等个五六天就行)
呆呆
2021/10/09
6.6K0
SpringBoot项目中快速集成腾讯云短信SDK实现手机验证码功能
大家春节好!我是程序员阿福,今天过年的日子祝大家在新的一年里健康平安、步步高升、虎年大吉大利、财源滚滚! 今天分享一篇简短一点的文章,希望在将来工作中需要的时候能够用得到,如果将来工作中需要实现短信验证码功能时可以打开我的公众号并翻到这篇文章再仔细参考我的实现思路,那么笔者分享这篇文章的用意也就达到了。
用户3587585
2022/03/09
4.6K1
SpringBoot项目中快速集成腾讯云短信SDK实现手机验证码功能
java对接腾讯云短信,通过api发送短信
腾讯云短信(Short Message Service,SMS)沉淀腾讯十多年短信服务技术和经验,为 QQ、微信等亿级平台和10万+客户提供快速灵活接入的高质量的国内短信与国际/港澳台短信服务,具有非常高的稳定性。本文主要介绍如何使用Java SDk进行和腾讯云短信平台的对接,对接目标是在Java应用程序调用腾讯云短信的接口向目标手机号发送短信。
方志朋
2019/12/10
58.1K1
SpringBoot 开发案例之接入腾讯云短信
腾讯云短信(Short Message Service,SMS)沉淀腾讯十多年短信服务技术和经验,为 QQ、微信等亿级平台和10万+客户提供快速灵活接入的高质量的国内短信与国际/港澳台短信服务。
小柒2012
2020/11/05
4.1K1
cat监控实现腾讯云短信告警
CAT(Central Application Tracking),是基于 Java 开发的分布式实时监控系统。CAT在基础存储、高性能通信、大规模在线访问、服务治理、实时监控、容器化及集群智能调度等领域提供业界领先的、统一的解决方案。CAT 目前在美团的产品定位是应用层的统一监控组件。
GavinWang
2020/05/28
10.9K0
SpringBoot 集成腾讯云短信服务
开通腾讯云短信服务 注册腾讯云 个人实名认证 进入到控制台,在云产品中找到短信 默认是没有开通的,阅读服务协议后,点击开始接入 目前来说,只要实名认证过的,直接就可以开通短信服务 这个时候,就可以查看短信控制面板了 测试短信发送 快速开始 用自己的微信去注册一个公众号,我这边目前已经有公众号,所以使用公众号就可以使用短信服务 创建短信模板 接下来耐心等待,基本上1小时内就行了,还是比较快的~ 审核短信 初次使用,会有100条免费
风间影月
2021/12/18
12.7K0
SpringBoot 集成腾讯云短信服务
腾讯云短信服务实现 Java 发送手机验证码(SpringBoot+Redis 实现)
前置:需要腾讯云的账号,后期授权需要,不需要买云服务器,有需要的可以购买短信套餐(几块钱)
RAIN7
2022/08/23
3.5K0
腾讯云短信服务实现 Java 发送手机验证码(SpringBoot+Redis 实现)
Springboot整合腾讯云短信实现系统短信登录与注册
一个登录模块,无非就是一个鉴权。现代社会,大家手机不离身,使用手机进行鉴权,并完成后续单点登录,无疑是一个不错的方法。
Mintimate
2022/03/10
7.4K0
Springboot整合腾讯云短信实现系统短信登录与注册
Fdog系列(三):使用腾讯云短信接口发送短信,数据库写入,部署到服务器,web收尾篇。
Fdog系列(一):思来想去,不如写一个聊天软件,那就从仿QQ注册页面开始吧。 Fdog系列(二):html写完注册页面之后怎么办,用java写后台响应呀。
花狗Fdog
2021/05/06
2.5K0
云短信SDK配置代理方案实践
部分客户公司有公网访问白名单限制,而腾讯云短信服务所使用云API3.0接口后端IP无法固定,因此需要经过代理,开发者服务器需要通过代理服务器将请求发送给腾讯云短信API接口,腾讯云短信服务也能通过http代理将返回包发送给开发者服务器。
云通信组之虎-小明
2021/07/16
3.4K0
手把手带你在集成SpringSecurity的SpringBoot应用中添加短信验证码登录认证功能
在上一篇文章一文理清SpringSecurity中基于用于名密码的登录认证流程中笔者有详细地介绍了Spring Security登录认证的流程,也为我们在工作中面需要实现自定义的登录认证如手机号+短信验证码、邮箱地址+邮箱验证码以及第三方登录认证等方式的扩展做好了准备。那么本文,笔者就手把手带大家实现在集成了Spring Security的SpringBoot项目中如何增加一种手机号+短信验证码的方式实现登录认证。
用户3587585
2022/04/14
2.6K0
手把手带你在集成SpringSecurity的SpringBoot应用中添加短信验证码登录认证功能
瑞吉外卖实战项目全攻略——总结篇
该系列将记录一份完整的实战项目的完成过程,该篇属于总结篇,主要负责总结整个项目技术点和注意点
秋落雨微凉
2022/11/11
4.4K0
瑞吉外卖实战项目全攻略——总结篇
java实现短信验证码登陆 demo
我们使用的API平台是:秒嘀云: https://sms.miaodiyun.com/login.html
故久
2019/09/29
5.6K0
java实现短信验证码登陆 demo
【探花交友】day01—项目介绍与环境搭建
探花交友是一个陌生人的在线交友平台,在该平台中可以搜索附近的人,查看好友动态,平台还会通过大数据计算进行智能推荐,通过智能推荐可以找到更加匹配的好友,这样才能增进用户对产品的喜爱度。探花平台还提供了在线即时通讯功能,可以实时的与好友进行沟通,让沟通随时随地的进行。
陶然同学
2023/04/08
1.4K1
【探花交友】day01—项目介绍与环境搭建
瑞吉外卖(终章)项目优化
Spring Cache是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。
小沐沐吖
2022/09/22
6610
java实现发短信功能---腾讯云短信
前言 如今发短信功能已经成为互联网公司的标配,本篇文章将一步步实现java发送短信 考察了许多提供短信服务的三方,几乎所有都需要企业认证才可以使用,这对于个人学习非常不方便。多方比较之后,选择了腾讯云(此处并非做广告),原因有两点: 支持微信公众号认证(门槛低) 每月赠送100条免费短信(适合个人学习)(这一点请矿家子弟自行忽略)。超过100条的时候, 可以开通收费短信服务-腾讯云短信服务套餐 [or5qsa3nyy.png] 开发环境 请参照: 基于SpringBoot构建分模块项目 腾讯云 ---短信
聚优云惠
2019/12/26
27.9K0
使用腾讯云知识引擎接入满血DeepSeek-R1打造您专属的个人知识库
最近的DeepSeek好火,它是由杭州深度求索人工智能基础技术研究有限公司出品的一款先进的人工智能产品。DeepSeek以其强大的技术实力和创新应用,迅速在人工智能领域崭露头角,成为行业关注的焦点。
半月无霜
2025/03/06
2030
rabbitMq实现系统内的短信发送设计&动态获取BEAN
1.短信非系统的重要节点操作,可以在任务完成之后,比如下单成功,发送下单成功的mq消息,短信服务接收到mq消息, 动态的判断该短信的code,通过全局公共的父类(调用中台等接口获取全部所有需要的对象参数),获取短信中的{mobile}等参数来替换短信模板中的可变量。 这样系统中的所有的发送短信,都可以继承该父类,获取参数,从而实现方便快捷的扩展短信接入和对原来的短信模板内容的修改或新增短信中的可变量。
oktokeep
2024/10/09
1740
rabbitMq实现系统内的短信发送设计&动态获取BEAN
推荐阅读
相关推荐
腾讯云短信服务发送验证码
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验