给安卓端调用的短信发送接口demo
package com.js.ai.modules.pointwall.action; import java.io.IOException;
import java.util.HashMap;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.js.ai.common.utils.CacheUtils;
import com.js.ai.common.utils.StringUtils;
import com.js.ai.common.web.BaseController;
import com.js.ai.modules.pointwall.util.JsonHandle;
import com.js.ai.modules.pointwall.util.SysConfigUtil;
import com.js.ai.smssend.SendValidCode; /**
*
* @ClassName: SendSmsAction
* @Description: 短信验证码 Controller
* @author:
* @date:
*/
@Controller
@RequestMapping(value = "${adminPath}/client")
public class SendSmsAction extends BaseController {
private static Logger logger = Logger.getLogger(SendSmsAction.class); /**
*
* @Title: sendSms
* @Description: 发送短信验证码
* @param request
* @param response
* @throws IOException
*
* @return: void
*/
@RequestMapping(value = "sendSMS")
@ResponseBody
public String sendSms(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");
String uuid = request.getParameter("uuid");// 获取客户端发送的手机唯一标识码
String phone = request.getParameter("phone");// 获取客户端发送手机号码
String phone_map = (String) CacheUtils.get(phone);// 根据手机号这个key取出对应的uuid值,限制同一个手机号五分钟内只能发送一次号码
String uuid_map = (String) CacheUtils.get(uuid);// 取出uuid的值来限制一台手机五分钟内只能发送一条短息。
HashMap<String, String> map = new HashMap<String, String>();
int smsCode = 100000 + (int) (Math.random() * 899999);// 随机验证码
String verificationCode = String.valueOf(smsCode);// 验证码
if (StringUtils.isEmpty(uuid_map)) {// 第一次为空的时候则插入缓存中
CacheUtils.put(uuid, uuid);// 用同一个uuid即作为key 也作为value
if (StringUtils.isNotBlank(phone) && StringUtils.isEmpty(phone_map)) {
CacheUtils.put(phone, phone);
String result = SendValidCode.sendMessage(SysConfigUtil.SMS_ZH, SysConfigUtil.SMS_PW, phone,
SysConfigUtil.SMS_QM, verificationCode, SysConfigUtil.SMS_WAY);
logger.info("客户端第一次发送短信" + phone + ">>>>" + uuid);
} else {// 即使同一个号码 在不同的手机上 也同样限制为在五分钟内只能 发送一次短信获取验证码
map.put("sendSMS", "error");
logger.info("当前在五分钟内不能重复发送短信" + phone + ">>>>" + uuid);
} } else { if (uuid_map.equals(uuid)) {// 第二次之后进来,则判断uuid是否一样,如果是则代表五分钟内不能发送短信
map.put("sendSMS", "error");
logger.info("当前在五分钟内不能重复发送短信" + phone + "=====" + uuid);
} else {
if (StringUtils.isNotBlank(phone)) {// 法则发送信息,并重新赋值 String result = SendValidCode.sendMessage(SysConfigUtil.SMS_ZH, SysConfigUtil.SMS_PW, phone,
SysConfigUtil.SMS_QM, verificationCode, SysConfigUtil.SMS_WAY); CacheUtils.put(phone, phone);
CacheUtils.put(uuid, uuid);// 用同一个uuid即作为key 也作为value
logger.info("当前不在五分钟内允许发送短信");
} }
} map.put("Checkcode", verificationCode);
String Checkcode = JsonHandle.toJson(map);
return Checkcode;
}
}
给安卓端调用的短信发送接口demo的更多相关文章
- 短信发送接口demo
public class SendValidCode { // 短信发送的接口网关 private static String sendUrl = "******************** ...
- 短信发送接口被恶意访问的网络攻击事件(四)完结篇--搭建WAF清理战场
前言 短信发送接口被恶意访问的网络攻击事件(一)紧张的遭遇战险胜 短信发送接口被恶意访问的网络攻击事件(二)肉搏战-阻止恶意请求 短信发送接口被恶意访问的网络攻击事件(三)定位恶意IP的日志分析脚本 ...
- thinkphp 5.0整合阿里大于验证码短信发送接口,含完整模型验证实例DEMO
为大家分享一个阿里大于短信发送接口: 首先创建一个发送模型(Send.php): <?php namespace app\index\model; use think\Validate; cla ...
- 短信发送接口被恶意访问的网络攻击事件(三)定位恶意IP的日志分析脚本
前言 承接前文<短信发送接口被恶意访问的网络攻击事件(二)肉搏战-阻止恶意请求>,文中有讲到一个定位非法IP的shell脚本,现在就来公布一下吧,并没有什么技术难度,只是当时花了些时间去写 ...
- JAVA 调用第三方短信平台接口发送短信
做了几个调用三方短信平台发送短信的例子,大部分需要 携带参数,向指定URL发送请求 回顾对接第一个平台时痛苦的乱码经历,这里放一份代码,算是个模版,再用到的时候过来copy一下就OK. 在进入主题之前 ...
- C# 编写短信发送Window服务
我们做项目过程中,一般都会有发送短信的需求.最常见的就是户注册或者登录时发送短信验证码.不同类型的短信发送,我们都可以放到到一张短信表中,然后通过一个定时的作业去执行短信发送.而定时作业的执行,我们就 ...
- python 简单爬虫获取气象数据发送气象定时报-预报预警信息及时推送及阿里云短信群发接口
!/usr/bin/python #encoding=utf-8 #Author:Ruiy #//////////////////////////////////////////////////// ...
- Abp 添加阿里云短信发送
ABP中有短信发送接口ISmsSender public interface ISmsSender { Task<string> SendAsync(string number, stri ...
- destoon 短信发送函数及短信接口修改
// $DT在common.inc.php中定义, $CACHE = cache_read('module.php'); $DT = $CACHE['dt']; 从缓存里读取网站配置信息. //$d ...
随机推荐
- javascript 对象简单介绍(一)
JavaScript 对象JavaScript 中的所有事物都是对象:字符串.数值.数组.函数...此外,JavaScript 允许自定义对象.所有事物都是对象JavaScript 提供多个内建对象, ...
- javascript简单介绍总结(二)
JavaScript 函数函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块.JavaScript 函数语法函数就是包裹在花括号中的代码块,前面使用了关键词 function:function ...
- UWP
东哥对UWP有兴趣么 Shine 2016/4/23 13:37:23 最近好像是重大更新 Shine 2016/4/23 13:37:27 https://blogs.msdn.microsoft ...
- 复制文件夹的方法 .net
void CopyDirectory(string SourcePath,string DestinationPath) { //创建所有目录 foreach(string dirPath inDir ...
- DGA GAN——GAN在安全中的应用
DGA的模型:https://github.com/Yuren-Zhong/DeepDGA CNN.LSTM.双向LSTM 论文可以看https://openreview.net/pdf?id=BJL ...
- ARM的编程模式和7种模式
ARM采用的是32位架构 ARM阅读 --Byte: 8 bits --Halfword: 16 bits(2 byte) 半字 --Word: 32 bits( ...
- LeetCode OJ:Pow(x, n) (幂运算)
Implement pow(x, n). 幂运算,简单的方法snag然很好实现,直接循环相乘就可以了,但是这里应该不是那种那么简单,我的做法使用到了一点递归: class Solution { pub ...
- 【git】不同协议的路径
https https://github.com/yesuuu/ganLearn.git ssh git@github.com:yesuuu/ganLearn.git git@idc:ganLearn ...
- git合并分支与解决冲突
前提: 当前开发的分支为feature/20161129_317606_algoplatform_1,由于feature/20161130_322574_tmstools_1分支有新内容,所以准备将f ...
- .Net WebApi 添加Swagger
前言 随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染.先后端分离的形态,而且前端技术和后端技术在各自的道路上越走越远. 前端和后端的唯一联系,变成了API接口:API文档 ...