Java實(shí)現(xiàn)短信驗(yàn)證碼的示例代碼
背景
Java是一種流行的編程語(yǔ)言,驗(yàn)證碼是一種常用的網(wǎng)絡(luò)安全技術(shù)。Java發(fā)展至今,網(wǎng)上也出現(xiàn)了各種各樣的驗(yàn)證碼,本人初學(xué)Java,下面是我用Java實(shí)現(xiàn)短信驗(yàn)證碼的總結(jié)。
截圖展示

實(shí)現(xiàn)代碼
后臺(tái)接收前臺(tái)的kgCaptchaToken進(jìn)行驗(yàn)證,驗(yàn)證成功執(zhí)行成功處理,驗(yàn)證失敗返回錯(cuò)誤代碼及信息。
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");
// 后臺(tái)處理
if (request.getMethod().equals("POST")){
String html, appId, appSecret, Token;
// 設(shè)置 AppId 及 AppSecret,在應(yīng)用管理中獲取
appId = "appId";
appSecret = "appSecret";
// 填寫(xiě)你的 AppId 和 AppSecret,在應(yīng)用管理中獲取
KgCaptchaSDK KgRequest = new KgCaptchaSDK(appId, appSecret);
// 前端驗(yàn)證成功后頒發(fā)的 token,有效期為兩分鐘
KgRequest.token = request.getParameter("kgCaptchaToken");
// System.out.print(KgRequest.token);
// 填寫(xiě)應(yīng)用服務(wù)域名,在應(yīng)用管理中獲取
KgRequest.appCdn = "https://cdn.kgcaptcha.com";
// 請(qǐng)求超時(shí)時(shí)間,秒
KgRequest.connectTimeout = 5;
// 用戶(hù)登錄或嘗試帳號(hào),當(dāng)安全策略中的防控等級(jí)為3時(shí)必須填寫(xiě),一般情況下可以忽略
// 可以填寫(xiě)用戶(hù)輸入的登錄帳號(hào)(如:request.getParameter("username"),可攔截同一帳號(hào)多次嘗試等行為
KgRequest.userId = "kgCaptchaDemo";
// request 對(duì)象,當(dāng)安全策略中的防控等級(jí)為3時(shí)必須填寫(xiě),一般情況下可以忽略
KgRequest.request = request;
// java 環(huán)境中無(wú)法提供 request 對(duì)象,請(qǐng)分別定義:clientIp|clientBrowser|domain 參數(shù),即:
// KgRequest.clientIp = "127.0.0.1"; // 填寫(xiě)客戶(hù)端IP
// KgRequest.clientBrowser = ""; // 客戶(hù)端瀏覽器信息
// KgRequest.domain = "http://localhost"; // 你的授權(quán)域名或服務(wù)IP
// 發(fā)送驗(yàn)證請(qǐng)求
Map<String, String> requestResult = KgRequest.sendRequest();
if("0".toString().equals(requestResult.get("code"))) {
// 驗(yàn)簽成功邏輯處理 ***
// 這里做驗(yàn)證通過(guò)后的數(shù)據(jù)處理
// 如登錄/注冊(cè)場(chǎng)景,這里通常查詢(xún)數(shù)據(jù)庫(kù)、校驗(yàn)密碼、進(jìn)行登錄或注冊(cè)等動(dòng)作處理
// 如短信場(chǎng)景,這里可以開(kāi)始向用戶(hù)發(fā)送短信等動(dòng)作處理
// ...
html = "<script>alert('驗(yàn)證通過(guò)');history.back();</script>";
} else {
// 驗(yàn)簽失敗邏輯處理
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);
}
}后端檢測(cè)
后臺(tái)接收數(shù)據(jù),同時(shí)對(duì)來(lái)源及應(yīng)用進(jìn)行檢測(cè)。
# 服務(wù)器黑名單檢測(cè)
if self.auth.client_blacklist():
return self.r_code(20017) # 服務(wù)器黑名單
# 驗(yàn)簽次數(shù)限制檢測(cè)
excess = self.auth.excess(2)
if excess:
return self.r_code(code=[20020, 20021, 20022][excess - 1])
# 來(lái)路域名檢測(cè)
if not self.kg["HTTP_REFERER"]: return self.r_code(20004) # 域名不合法,無(wú)法獲取來(lái)路域名
if not self.auth.domain_auth(): return self.r_code(20005) # 來(lái)源域名未授權(quán)
# 應(yīng)用有效時(shí)間檢測(cè)
validity = self.auth.app_validity()
if validity[0] == 1: return self.r_code(20006) # 授權(quán)未開(kāi)始
if validity[0] == 2: return self.r_code(20007) # 授權(quán)已結(jié)束
if self.auth.app_state(): return self.r_code(20008) # 當(dāng)前應(yīng)用/域名被禁用到此這篇關(guān)于Java實(shí)現(xiàn)短信驗(yàn)證碼的示例代碼的文章就介紹到這了,更多相關(guān)Java短信驗(yàn)證碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決java使用axios.js的post請(qǐng)求后臺(tái)時(shí)無(wú)法接收到入?yún)⒌膯?wèn)題
今天小編就為大家分享一篇解決java使用axios.js的post請(qǐng)求后臺(tái)時(shí)無(wú)法接收到入?yún)⒌膯?wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09
Mybatis-Plus批量添加或修改數(shù)據(jù)的3種方式總結(jié)
使用Mybatis-plus可以很方便的實(shí)現(xiàn)批量新增和批量修改,不僅比自己寫(xiě)foreach遍歷方便很多,而且性能也更加優(yōu)秀,下面這篇文章主要給大家介紹了關(guān)于Mybatis-Plus批量添加或修改數(shù)據(jù)的3種方式,需要的朋友可以參考下2023-05-05
JAVA后端學(xué)習(xí)精華之網(wǎng)絡(luò)通信項(xiàng)目進(jìn)階
不同項(xiàng)目之間的通信方式分為,http、socket、webservice;其中socket通信的效率最高,youtube就采用的是原始的socket通信,他們信奉的原則是簡(jiǎn)單有效2021-09-09
java實(shí)現(xiàn)的新浪微博分享代碼實(shí)例
這篇文章主要介紹了java實(shí)現(xiàn)的新浪微博分享代碼實(shí)例,是通過(guò)新浪API獲得授權(quán),然后接受客戶(hù)端請(qǐng)求的數(shù)據(jù),第三方應(yīng)用發(fā)送請(qǐng)求消息到微博,喚起微博分享界面,非常的實(shí)用,有相同需要的小伙伴可以參考下。2015-03-03
Java實(shí)現(xiàn)線程的暫停和恢復(fù)的示例詳解
使用kotlin編寫(xiě)spring cloud微服務(wù)的過(guò)程
Java 手動(dòng)解析不帶引號(hào)的JSON字符串的操作

