【总结】Java实现短信验证码

宙哈哈
• 阅读 102

背景

Java是一种流行的编程语言,验证码是一种常用的网络安全技术。Java发展至今,网上也出现了各种各样的验证码,本人初学Java,下面是我用Java实现短信验证码的总结。

截图展示

【总结】Java实现短信验证码

实现代码

后台接收前台的kgCaptchaToken进行验证,验证成功执行成功处理,验证失败返回错误代码及信息。

package com.kyger;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;

public class demo extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public demo() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    // 编码
    request.setCharacterEncoding("utf-8");
    response.setCharacterEncoding("utf-8");;
    response.setContentType("text/html; charset=utf-8");

    // 后台处理
    if (request.getMethod().equals("POST")){
        String html, appId, appSecret, Token;

    // 设置 AppId 及 AppSecret,在应用管理中获取
    appId = "appId";
    appSecret = "appSecret";

    // 填写你的 AppId 和 AppSecret,在应用管理中获取
    KgCaptchaSDK KgRequest = new KgCaptchaSDK(appId, appSecret);


    // 前端验证成功后颁发的 token,有效期为两分钟
    KgRequest.token = request.getParameter("kgCaptchaToken");
    // System.out.print(KgRequest.token);

    // 填写应用服务域名,在应用管理中获取
    KgRequest.appCdn = "https://cdn.kgcaptcha.com";

    // 请求超时时间,秒
    KgRequest.connectTimeout = 5;

    // 用户登录或尝试帐号,当安全策略中的防控等级为3时必须填写,一般情况下可以忽略
    // 可以填写用户输入的登录帐号(如:request.getParameter("username"),可拦截同一帐号多次尝试等行为
    KgRequest.userId = "kgCaptchaDemo";

    // request 对象,当安全策略中的防控等级为3时必须填写,一般情况下可以忽略
    KgRequest.request = request;
    // java 环境中无法提供 request 对象,请分别定义:clientIp|clientBrowser|domain 参数,即:
    // KgRequest.clientIp = "127.0.0.1";  // 填写客户端IP
    // KgRequest.clientBrowser = "";  // 客户端浏览器信息
    // KgRequest.domain = "http://localhost";  // 你的授权域名或服务IP        

    // 发送验证请求
    Map<String, String> requestResult = KgRequest.sendRequest();
    if("0".toString().equals(requestResult.get("code"))) {
        // 验签成功逻辑处理 ***

        // 这里做验证通过后的数据处理
        // 如登录/注册场景,这里通常查询数据库、校验密码、进行登录或注册等动作处理
        // 如短信场景,这里可以开始向用户发送短信等动作处理
        // ...

        html = "<script>alert('验证通过');history.back();</script>";
    } else {
        // 验签失败逻辑处理
        html = "<script>alert(\"" + requestResult.get("msg") + " - " + requestResult.get("code") + "\");history.back();</script>";
    }        

    response.getWriter().append(html);
    } else {
        response.sendRedirect("index.html");
    }        
}

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doGet(request, response);
    }

}

后端检测

后台接收数据,同时对来源及应用进行检测。

# 服务器黑名单检测
if self.auth.client_blacklist():
    return self.r_code(20017)  # 服务器黑名单

# 验签次数限制检测
excess = self.auth.excess(2)
if excess:
        return self.r_code(code=[20020, 20021, 20022][excess - 1])

# 来路域名检测
if not self.kg["HTTP_REFERER"]: return self.r_code(20004)  # 域名不合法,无法获取来路域名
if not self.auth.domain_auth(): return self.r_code(20005)  # 来源域名未授权

# 应用有效时间检测
validity = self.auth.app_validity()
if validity[0] == 1: return self.r_code(20006)  # 授权未开始
if validity[0] == 2: return self.r_code(20007)  # 授权已结束

if self.auth.app_state(): return self.r_code(20008)  # 当前应用/域名被禁用

结尾

SDK开源地址:https://github.com/KgCaptcha,顺便做了一个演示:https://www.kgcaptcha.com/demo/

点赞
收藏
评论区
推荐文章
Irene181 Irene181
1年前
拒绝反爬虫!教你搞定爬虫验证码
导读:目前,许多网站采取各种各样的措施来反爬虫,其中一个措施便是使用验证码。随着技术的发展,验证码的花样越来越多。验证码最初是几个数字组合的简单的图形验证码,后来加入了英文字母和混淆曲线。有的网站还可能看到中文字符的验证码,这使得识别越发困难。使用验证码可以防止应用或者网站被恶意注册、攻击,对于网站、APP而言,大量的无效注册、重复注册甚至是恶意攻击很令
Wesley13 Wesley13
1年前
thinkphp集成系列之短信验证码、订单通知
现在这个短信通知泛滥的年代;应用如果没有个短信注册;你都不敢说你是搞开发的;这个验证码搞起来是不难的;但是如果刚接触也是有点不知从哪下手的迷茫;先讲下概念;1:找一个靠谱的短信验证码平台;推荐如下使用过的;下面以容联云通讯为例;其他平台一个道理;    阿里大鱼:http://www.alidayu.com/service?spma314
Wesley13 Wesley13
1年前
JAVA接入短信接口,实现短信验证码功能
最近网站要加短信验证功能,不得不要折腾一番。好了,不多说了,说一下过程。首先是短信服务商的选择,以前没接触过,只能找度娘了,找了三家,对比一下。价格:1、秒嘀科技(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.miaodiyun.com)短信接口、短信验证码、语音验
Wesley13 Wesley13
1年前
JAVA短信验证码 工具类
<aname'MsgCodeUtil.java'</aMsgCodeUtil.javapackagecom.hg.util;importcom.soyea.enums.ResultEnum;importcom.soyea.exception.BizException;import
Wesley13 Wesley13
1年前
springMVC+Java验证码完善注册功能
这篇文章简单的写了一个java验证码,为之前写过的springMVC注册功能加上验证码,验证码的作用就不多说了,防止机器人程序恶意注册什么的。。。基本的注册功能的实现请查看之前的文章Maven搭建springMVCspringhibernate实现用户注册(https://www.oschina.net/action/GoToLi
Stella981 Stella981
1年前
Spring Security构建Rest服务
浏览器模式下验证码存储策略浏览器模式下,生成的短信验证码或者图形验证码是存在session里的,用户接收到验证码后携带过来做校验。!(https://oscimg.oschina.net/oscnet/75774cf1ab5780bbf370ae42d1eff49e777.png)APP模式下验证码存储策略
Wesley13 Wesley13
1年前
.Net中验证码图片生成
开发网站或平台系统,登录页面是必不可少的功能,但是现在很多人可以使用工具暴力破解网站密码,为了防止这类非法操作,需要在登录页面添加验证,验证码就是最常用的一种验证方式。我结合了自己的经验和网上的验证码资料,总结一下c验证码开发,直接放代码,文中有注释,可以轻松理解代码意思。功能:实现了打开登陆页面是生成验证码图片以及点击验证码时,刷新验证码功能,验
Wesley13 Wesley13
1年前
java生成图形验证码
首先,需要生成验证码字符串,方式很多,下面提供一种,根据指定源的方式来生成验证码/使用系统默认字符源生成验证码@paramverifySize验证码长度@return/publicstaticStringgenera
liam liam
7个月前
如何读取redis的手机号验证码数据,实现自动化登录测试
1、案例描述用户选择短信登录!发送短信后,后端接口逻辑已把验证码缓存在redis,!在apifox上定义对应下发登录短信接口,短信登录接口下载地址:这时候问题就来了,怎么样才能让apifox自动获取下发登录短信接口对应的手机号的验证码,自动填充到短信登录接口的code字段?2、解决思路方案一:后端通过接口返回验证码
宙哈哈 宙哈哈
2星期前
Vue.js 滑动拼图验证码实现笔记
关于验证码的使用场景还是非常多的,很多网站上的验证码可谓是五花八门,下面是我使用Vue.js实现滑动拼图验证码做的一个笔记。