企业短信防火墙【新昕科技】+短信验证码【中昱维信】Java应用实例

  • 一、企业短信防火墙的实现
    • 1.1 简介
    • 1.2 第一步:获取防火墙帐号密钥
    • 1.3 第二步:下载防火墙服务器
    • 1.4 第三步:业务系统前后端接入
    • 1.5丰富可视化实时风险大盘,
  • 二、短信验证码的实现
    • 2.1 简介
    • 2.2 短信服务商接入

一、企业短信防火墙的实现

1.1 简介

新昕科技在交易反欺诈核心上, 通过AI快速学习机制,结合国际领先的设备指纹技术,首次推出无需图形验证码机制的企业短信防火墙,三步完成下载对接。

1.2 第一步:获取防火墙帐号密钥

进入 防火墙控制台,在左侧导航栏选择【网站管理】,进入网站管理页面,单击【发到邮箱】接收密钥。

1.3 第二步:下载防火墙服务器

前往新昕科技官网,在顶部导航栏选择【解决方案】>【下载中心】,进入下载中心页面,找到短信防火墙服务器安装包,点击【下载链接】即可下载。

1.4 第三步:业务系统前后端接入

web 前端接入:
前端接入:
Web前端接入文档
Java 在页面合适的位置(标签内)加入以下代码引入JS文件:

<script type="text/javascript" src="/NxtJsServlet"></script>

PHP 在页面合适的位置(标签内)加入以下代码引入JS文件:

<script id="finger" type="text/javascript" src="/nxt_inc/nxt_front.php"></script>

后端接入:
Java
修改配置(和业务系统同系统不需要修改):
newxtc.ini (存放位置:"/WEB-INF/classes/newxtc.ini")
修改参数(fireWareUrl)–> fireWareUrl=http://localhost:7502
短信下发

public RetMsg smsSend(HttpServletRequest request, HttpServletResponse response, String clientMobile) {RetMsg retMsg = new RetMsg(-1, "系统异常");FwClient fwClient = new FwClientImpl();try {// 1 调用【短信防火墙】短信发送请求HashMap < String, Object > paramMap = fwClient.getSendReq(request, clientMobile);String jsonReq = fwClient.execReq(paramMap);String smsSendRet = fwClient.getRetVaule(jsonReq, "riskResult");if("REJECT".equals(smsSendRet)) {retMsg.setRet(3);retMsg.setMsg("请求过于频繁");}else {// 业务 TODO// 业务调用短信接口 TODO// 调用短信接口 结束if(smsRetMsg != null && smsRetMsg.getRet() == 0) {// 2 调用【短信防火墙】成功结果fwClient.execSucc(paramMap);logger.debug("send succ");retMsg.setRet(0);retMsg.setMsg("发送验证码成功");}else {// 2 调用【短信防火墙】失败结果SmsVerifyCache.getInstance().remove(clientMobile);fwClient.execFail(paramMap);retMsg.setRet(-1);retMsg.setMsg("发送验证码失败");}}}catch(Exception e) {for(StackTraceElement elment: e.getStackTrace()) {logger.error(elment.toString());}}return retMsg;
}

短信验证

public RetMsg smsVerify(HttpServletRequest request, HttpServletResponse response, String clientMobile, String smsVerifyCode) {FwClient fwClient = new FwClientImpl();RetMsg retMsg = new RetMsg(-1, "系统异常");if(smsVerifyCode == null || smsVerifyCode.isEmpty()) {retMsg.setRet(1);retMsg.setMsg("输入验证码为空");}else {// 1 调用【短信防火墙】验证请求HashMap < String, Object > paramMap = fwClient.getVerifyReq(request, clientMobile); // 请求防火墙String jsonReq = fwClient.execReq(paramMap);// 报文处理String smsSendRet = fwClient.getRetVaule(jsonReq, "riskResult");if("REJECT".equals(smsSendRet)) {retMsg.setRet(3);retMsg.setMsg("请求过于频繁");}// 业务 TODOif(cacheSmsVerify != null && cacheSmsVerify.getVerifyCode() != null && !cacheSmsVerify.getVerifyCode().isEmpty()) {if(cacheSmsVerify.getVerifyCode().equals(smsVerifyCode)) {retMsg.setRet(0);retMsg.setMsg("验证成功");}else {retMsg.setRet(1);retMsg.setMsg("验证码错误");}}else {retMsg.setRet(-9);retMsg.setMsg("验证码超时");}if(retMsg.getRet() == 0) {// 2 调用【短信防火墙】成功结果fwClient.execSucc(paramMap);}else {// 2 调用【短信防火墙】失败结果fwClient.execFail(paramMap);}}return retMsg;
}

1.5丰富可视化实时风险大盘,

防御拦截数据尽收眼底,实时查看当日数据详情与近期风险趋势。
通过风控数据看板,可查看1-30天的验证情况、风控拦截情况以及验证事件触发的AI模型情况。
进入防火墙控制台,在左侧导航栏选择【风险大盘】,进入风险大盘页面。

二、短信验证码的实现

2.1 简介

企业防火墙只能防止机器人脚本恶意攻击网站或App,如何识别到是本人操作的,还需要结合短信验证码进一步进行身份识别。本文以注册为例,在SpringMVC+Spring+Mybatis框架的基础上完成该短信验证码功能。

发送短信验证码的原理是:随机生成一个4-6位数字,将该4-6位数字保存到session当中,客户端通过sessionid判断对应的session,用户输入的验证码再与session记录的验证码进行比较。

一般的第三方短信平台都会有他们自己的短信接口,只要读懂他们的接口稍作稍作改变就能满足自己的需求。

首先将短信平台接口代码列出:这里需要依赖的三个通用jar包 commons-logging-1.1.1.jar,commons-httpclient-3.1.jar,commons-codec-1.4.jar。

2.2 短信服务商接入

开发短信验证码功能通常是采用第三方短信服务商的服务,作为短信下发渠道,以这个网站短信验证码为例:上海中昱文化传播有限公司【简称中昱维信】成立于2010年,是一家从事增值电信业务和软件开发服务的科技企业。获取试用验证码条数和验证码接口文档,进行接口对接前需首先进行准备工作:

短信签名报备

短信验证码需预先设置短信签名,签名会经过平台审核,审核通过后才可作为接口参数使用。

短信验证码模板报备

短信验证码需预先设置短信模板,签名会经过平台审核,审核通过后才可作为接口参数使用。

获取appId和appKey

为保障接口安全,短信验证码接口,使用多重加密的appId和appKey进行身份鉴权和校验,这两个字段作为验证码接口必填项,建议预先获取到,获取appKey时需要对注册人进行身份校验。

至此,短信服务商验证码接口已经准备完毕,接下来可以进行业务场景,进行短信验证码服务的开发,下面展示通用的短信验证码接入流程。
2.3 短信验证码代码实现

短信验证码前端较为简单,主要就是发送验证码和校验验证码两个ajax请求,结合上面的滑动验证可实现双重验证。前端页面结构如下:

   <html><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0"><!-- 国内使用 --><link rel="stylesheet" href="https://cdn.staticfile.org/amazeui/2.7.2/css/amazeui.min.css"><script type="text/javascript" charset="utf-8" src="https://cdn.staticfile.org/jquery/3.3.1/jquery.min.js"></script></head><body><div class="am-form"><div class="am-form-group"><label for="tel">请输入手机号</label><input type="text" class="" id="tel" placeholder="请输入手机号"></div><div id="__nc" style="height: 70px"><div id="nc"></div></div><div class="am-form-group"><label for="code">请输入验证码</label><input id="code" type="text" placeholder="请输入验证码"></div><button type="button" class="am-btn am-btn-primary">提交</button></div><script>var nc_token = ["CF_APP_1", (new Date()).getTime(), Math.random()].join(':');var nc=NoCaptcha.init({renderTo: '#nc',appkey: 'CF_APP_1',scene: 'register',token: nc_token,trans: {"key1": "code200"},elementID: ["usernameID"],is_Opt: 0,language: "cn",timeout: 10000,retryTimes: 5,errorTimes: 5,inline:false,apimap: {// 'analyze': '//a.com/nocaptcha/analyze.jsonp',// 'uab_Url': '//aeu.alicdn.com/js/uac/909.js',},bannerHidden:false,initHidden:false,callback: function (data) {window.console && console.log(nc_token)window.console && console.log(data.csessionid)window.console && console.log(data.sig);var tel = $('#tel').val();$.ajax({url: "sendCode",type: "post",data: {tel:tel},dataType: "json",success: function (result) {if (result.code == 0) {alert("验证码已发送!", "green")} else {alert("发送失败,请稍后再试!");nc.reset()}},error: function () {alert("系统繁忙,请稍后再试!", "red")}})},error: function (s) {}});NoCaptcha.setEnabled(true);nc.reset();//请务必确保这里调用一次reset()方法NoCaptcha.upLang('cn', {'LOADING':"加载中...",//加载'SLIDER_LABEL': "请向右滑动验证",//等待滑动'CHECK_Y':"验证通过",//通过'ERROR_TITLE':"非常抱歉,这出错了...",//拦截'CHECK_N':"验证未通过", //准备唤醒二次验证'OVERLAY_INFORM':"经检测你当前操作环境存在风险,请输入验证码",//二次验证'TIPS_TITLE':"验证码错误,请重新输入"//验证码输错时的提示});</script></body></html>

后端代码主要职责是两方面:1)接收生成验证码请求,生成验证码存入session中;2)接收校验验证码的请求,将存入session的验证码去除,与前端输入的验证码进行比对,比对一致则通过并进行视图转发,比对不一致则告知前端错误原因。主要实现代码如下:

    HttpSession session = req.getSession();// 验证码有效时间session.setMaxInactiveInterval(600);try {Integer num = RandNumber.getNum();//  发送验证码通道Sendsms.Send(num, phone);session.setAttribute(phone, num);return R.ok();} catch (Exception e) {e.printStackTrace();logger.error(e.getMessage());return R.error("fasle");}import java.io.Exception;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.HttpException;import org.apache.commons.httpclient.NameValuePair;import org.apache.commons.httpclient.methods.PostMethod;public class Sendsms {private static String Url = "https://vip.veesing.com/smsApi/verifyCode";// 发送短信验证码public static void Send(Integer num, String mobile) {try {HttpClient client = new HttpClient();PostMethod method = new PostMethod(Url);client.getParams().setContentCharset("UTF-8");method.setRequestHeader("ContentType", "application/x-www-form-urlencoded;charset=UTF-8");NameValuePair[] data = { new NameValuePair("appId", "*********"),new NameValuePair("appKey", "**********"), new NameValuePair("templateId", "*******"), new NameValuePair("mobile", "*******"),new NameValuePair("variables", "*******") };method.setRequestBody(data);client.executeMethod(method);String submitResult = method.getResponseBodyAsString();System.out.println(submitResult);} catch (Exception e) {e.printStackTrace();}}}HttpSession session = req.getSession();String yzm = String.valueOf(session.getAttribute(username));logger.info(yzm);if (yzm == null) {return R.error("验证码错误");}if (yzm != null && !verifycode.equals(yzm)) {return R.error("验证码错误");}

以上就是Java实现企业短信防火墙与短信验证码的全部实现,基于此案例,可实现安全性高、用户体验好的登录注册+企业短信防火墙+短信验证码功能。

原地址:短信接口被恶意调用?【新昕科技】企业短信防火墙+【中昱维信】短信验证码【Java应用实例】

如有问题可在留言区展开讨论哦,欢迎转发,如有改动请站内信通知本文作者,谢谢!

短信接口防刷防轰炸解决方案Java接入教程- 企业短信防火墙+ 【中昱维信】短信验证码相关推荐

  1. 短信接口被恶意调用?企业短信防火墙+【中昱维信】短信验证码【Java】

    短信接口被恶意调用?企业短信防火墙+[中昱维信]短信验证码[Java] 一.企业短信防火墙的实现 1.1 简介 1.2 第一步:获取防火墙帐号密钥 1.3 第二步:下载防火墙服务器 1.4 第三步:业 ...

  2. 基于springboot2.x+redis的接口防刷(防DOSS攻击)

    参考文章:https://blog.csdn.net/qq_17635843/article/details/78990881 自定义一个拦截器集成HandlerInterceptorAdapter里 ...

  3. 会员注册短信接口被攻击,如何防刷?

    网站或者APP注册页面,因为获取短信验证码的功能是暴露在外的,短信接口有可能被短信轰炸机攻击,那短信验证码防刷策略如何做呢?首先我们来了解一下短信接口攻击: 什么是短信接口攻击? 个别用户出于不正当目 ...

  4. php 预防循环发短信_php短信接口发送短信失败,罪魁祸首原来在这里

    随着国民经济的高速发展,短信的应用也逐渐商业化,很多企业.商家开始使用php短信接口来进行推广.营销或内部管理,只是个别的商家在应用php短信接口的时候却遇到了短信发送失败的现象,这到底是因为商家操作 ...

  5. 大聪明教你学Java | 调用腾讯云短信接口,实现短信通知

    前言 提到短信接口,相信每一位程序猿都不会陌生,它可以来帮助我们实现短信验证码.短信通知等等功能,刚好最近在帮朋友开发一套会员管理系统,里面也集成了短信功能(短信接口平台选择的是腾讯云平台),借此机会 ...

  6. 106短信平台行业中至关重要的短信接口是什么

    短信接口的应用已不陌生,但对许多人而言,短信接口专业性过强,无论是其作用还是优势都不甚了解,那么,短信接口究竟是什么? 短信接口是面向有一定技术开发能力的企业用户单独研发的一款企业短信开发程序,将短信 ...

  7. php正则替换短信模板,【PHP】短信接口(正则匹配)

    本篇文章主要介绍的是用正则匹配来实现短信接口的匹配,感兴趣的朋友可以了解一下. 第一步 登陆/注册微米短信平台 https://www.weimi.cc 注册成功后系统会赠送10条测试短信 第二步 查 ...

  8. 阿里云短信接口开发实践(Java)

    随着互联网的兴起,各行各业的需求都在不断的增加.随着业务的扩大,企业给用户发送短信验证码的业务,也是如火如荼.在这里,calvin给各位开发者推荐阿里云短信平台.原因有二:1.接入较简单,开发成本低 ...

  9. 2023-01-16 阿里SMS短信接口使用

    用户注册-使用阿里短信接口和Redis 文章目录 用户注册-使用阿里短信接口和Redis 步骤 1.导入依赖 2.redis属性配置文件 3.spring集成redis配置文件 4.短信接口属性配置文 ...

最新文章

  1. linux文本处理常用命令
  2. 【编程题目】左旋转字符串 ☆
  3. 排序算法 时间复杂度+空间复杂度 总结
  4. opengl android 线宽
  5. python能和c语音交互吗_Python与C交互概述
  6. 070_获取日期方法
  7. java文本区显示在右边_怎么让文本区从右边开始显示文本
  8. Linux下的字符处理命令之tr命令详解
  9. Linux - 在yocto构建中使用i2c-tools
  10. 如何elf文件转换为asm汇编文件
  11. bootstrap导航栏.nav和.navbar区别
  12. 软考网络工程师好考吗?怎么备考?
  13. 解决ValueError: Cannot run multiple SparkContexts at once; existing SparkContext
  14. linux计算与检查md5值
  15. 荷兰国旗问题(利用基数排序思想实现)
  16. GB28181设备端PS流封装和发送
  17. HDMI接口之HPD(热拔插)
  18. 算法设计与分析第一章作业
  19. EJB初级篇--何为EJB
  20. 学生信息统计(顺序表)

热门文章

  1. CVE-2019-0948:Microsoft Management Console (MMC)漏洞
  2. Zeta电位测定仪操作规程
  3. 第三章 PyCharm连接数据库使用
  4. Oracle数据保护DataGuard安装和配置一
  5. 利用wordcloud库生成词云(Python)
  6. 串口通信基本原理介绍
  7. Ubuntu 22.04 双系统安装和卸载
  8. 解决google翻译无法使用
  9. Flink China 社区运营成果报告(7月-9月)
  10. 【渝粤教育】国家开放大学2018年秋季 0242-22T机械制图 参考试题