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的更多相关文章

  1. 短信发送接口demo

    public class SendValidCode { // 短信发送的接口网关 private static String sendUrl = "******************** ...

  2. 短信发送接口被恶意访问的网络攻击事件(四)完结篇--搭建WAF清理战场

    前言 短信发送接口被恶意访问的网络攻击事件(一)紧张的遭遇战险胜 短信发送接口被恶意访问的网络攻击事件(二)肉搏战-阻止恶意请求 短信发送接口被恶意访问的网络攻击事件(三)定位恶意IP的日志分析脚本 ...

  3. thinkphp 5.0整合阿里大于验证码短信发送接口,含完整模型验证实例DEMO

    为大家分享一个阿里大于短信发送接口: 首先创建一个发送模型(Send.php): <?php namespace app\index\model; use think\Validate; cla ...

  4. 短信发送接口被恶意访问的网络攻击事件(三)定位恶意IP的日志分析脚本

    前言 承接前文<短信发送接口被恶意访问的网络攻击事件(二)肉搏战-阻止恶意请求>,文中有讲到一个定位非法IP的shell脚本,现在就来公布一下吧,并没有什么技术难度,只是当时花了些时间去写 ...

  5. JAVA 调用第三方短信平台接口发送短信

    做了几个调用三方短信平台发送短信的例子,大部分需要 携带参数,向指定URL发送请求 回顾对接第一个平台时痛苦的乱码经历,这里放一份代码,算是个模版,再用到的时候过来copy一下就OK. 在进入主题之前 ...

  6. C# 编写短信发送Window服务

    我们做项目过程中,一般都会有发送短信的需求.最常见的就是户注册或者登录时发送短信验证码.不同类型的短信发送,我们都可以放到到一张短信表中,然后通过一个定时的作业去执行短信发送.而定时作业的执行,我们就 ...

  7. python 简单爬虫获取气象数据发送气象定时报-预报预警信息及时推送及阿里云短信群发接口

    !/usr/bin/python #encoding=utf-8 #Author:Ruiy #//////////////////////////////////////////////////// ...

  8. Abp 添加阿里云短信发送

    ABP中有短信发送接口ISmsSender public interface ISmsSender { Task<string> SendAsync(string number, stri ...

  9. destoon 短信发送函数及短信接口修改

    // $DT在common.inc.php中定义, $CACHE = cache_read('module.php'); $DT = $CACHE['dt'];  从缓存里读取网站配置信息. //$d ...

随机推荐

  1. Nessus离线安装及升级插件 转

    修改Nessus Web端口 ./nessuscli fix --set xmlrpc_listen_port=8866 最近做客户的内网主机漏洞扫描,申请了一台内网主机做扫描服务器,安装Nessus ...

  2. cvSmooth函数 和 OpenCV自带的人脸检测

    记录cvSmooth函数的用法和 OpenCV自带的人脸检测. (1)cvSmooth函数 void cvSmooth( const CvArr* src, CvArr* dst,int smooth ...

  3. Linux文件的默认权限:umask

    1. 文件的默认权限 Linux下当我们新建一个文件和目录时,该文件和目录的默认权限是什么? 通过umask命令来查看: $ umask0002 $ umask -Su=rwx,g=rwx,o=rx ...

  4. Activity传递参数——传递自定义数据类型

    一.新建一个空的工程 二.在主界面中添加一个按钮 三.新建一个空的activity,并命名为TheAty 四.新建一个user类 //注意这里要实现Serializable,不然在传递参数时会出错 p ...

  5. 《Drools7.0.0.Final规则引擎教程》第4章 4.2 activation-group& dialect& date-effective

    activation-group 该属性将若干个规则划分成一个组,统一命名.在执行的时候,具有相同activation-group 属性的规则中只要有一个被执行,其它的规则都不再执行.可以用类似sal ...

  6. Arcgis Add-In开发入门实例

    作为一个本科侧重于应用,工作之后却做了开发的程序员来说,做GIS,开发应该是一门必修课,只是,苦于各种原因吧,做GIS应用的人会开发的很少,做GIS开发的大部分都是计算机出身,痛心疾首啊-- 不好意思 ...

  7. linux 系统统计目录下文件夹的大小

    du -ah --max-depth=1     这个是我想要的结果  a表示显示目录下所有的文件和文件夹(不含子目录),h表示以人类能看懂的方式,max-depth表示目录的深度. du命令用来查看 ...

  8. php str_pad();

    <?php $str = "Hello World"; echo str_pad($str,30,"."); ?> 运行实例 定义和用法 str_p ...

  9. python库之_thread

    官方参考文档:https://docs.python.org/3.7/library/_thread.html _thread库方法 (1) _thread.error (2)_thread.Lock ...

  10. SSH框架(1)

    一. SSH框架相关的面试题:   1.  BeanFactory的作用是什么?   [中] BeanFactory是配置.创建.管理bean的容器,有时候也称为bean上下文.Bean与bean的依 ...