欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實(shí)現(xiàn)短信驗(yàn)證碼的示例代碼

 更新時(shí)間:2023年03月31日 15:41:27   作者:宙哈哈  
Java是一種流行的編程語(yǔ)言,驗(yàn)證碼是一種常用的網(wǎng)絡(luò)安全技術(shù)。Java發(fā)展至今,網(wǎng)上也出現(xiàn)了各種各樣的驗(yàn)證碼,下面是用Java實(shí)現(xiàn)短信驗(yàn)證碼的總結(jié),感興趣的可以了解一下

背景

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";
            
    // 填寫你的 AppId 和 AppSecret,在應(yīng)用管理中獲取
    KgCaptchaSDK KgRequest = new KgCaptchaSDK(appId, appSecret);
            
    
    // 前端驗(yàn)證成功后頒發(fā)的 token,有效期為兩分鐘
    KgRequest.token = request.getParameter("kgCaptchaToken");
    // System.out.print(KgRequest.token);
    
    // 填寫應(yīng)用服務(wù)域名,在應(yīng)用管理中獲取
    KgRequest.appCdn = "https://cdn.kgcaptcha.com";
    
    // 請(qǐng)求超時(shí)時(shí)間,秒
    KgRequest.connectTimeout = 5;
            
    // 用戶登錄或嘗試帳號(hào),當(dāng)安全策略中的防控等級(jí)為3時(shí)必須填寫,一般情況下可以忽略
    // 可以填寫用戶輸入的登錄帳號(hào)(如:request.getParameter("username"),可攔截同一帳號(hào)多次嘗試等行為
    KgRequest.userId = "kgCaptchaDemo";
            
    // request 對(duì)象,當(dāng)安全策略中的防控等級(jí)為3時(shí)必須填寫,一般情況下可以忽略
    KgRequest.request = request;
    // java 環(huán)境中無(wú)法提供 request 對(duì)象,請(qǐng)分別定義:clientIp|clientBrowser|domain 參數(shù),即:
    // KgRequest.clientIp = "127.0.0.1";  // 填寫客戶端IP
    // KgRequest.clientBrowser = "";  // 客戶端瀏覽器信息
    // 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)景,這里通常查詢數(shù)據(jù)庫(kù)、校驗(yàn)密碼、進(jìn)行登錄或注冊(cè)等動(dòng)作處理
        // 如短信場(chǎng)景,這里可以開(kāi)始向用戶發(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)文章

  • Spring定時(shí)任務(wù)中@PostConstruct被多次執(zhí)行異常的分析與解決

    Spring定時(shí)任務(wù)中@PostConstruct被多次執(zhí)行異常的分析與解決

    這篇文章主要給大家介紹了關(guān)于Spring定時(shí)任務(wù)中@PostConstruct被多次執(zhí)行異常的分析與解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • Java?Stream流語(yǔ)法示例詳解

    Java?Stream流語(yǔ)法示例詳解

    這篇文章主要為大家詳細(xì)介紹了Java的Stream流,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • MybatisPlus?自定義插件實(shí)現(xiàn)攔截SQL修改功能(實(shí)例詳解)

    MybatisPlus?自定義插件實(shí)現(xiàn)攔截SQL修改功能(實(shí)例詳解)

    這篇文章主要介紹了MybatisPlus?自定義插件實(shí)現(xiàn)攔截SQL修改功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-11-11
  • Spring Boot + Mybatis多數(shù)據(jù)源和動(dòng)態(tài)數(shù)據(jù)源配置方法

    Spring Boot + Mybatis多數(shù)據(jù)源和動(dòng)態(tài)數(shù)據(jù)源配置方法

    最近做項(xiàng)目遇到這樣的應(yīng)用場(chǎng)景,項(xiàng)目需要同時(shí)連接兩個(gè)不同的數(shù)據(jù)庫(kù)A, B,并且它們都為主從架構(gòu),一臺(tái)寫庫(kù),多臺(tái)讀庫(kù)。下面小編給大家?guī)?lái)了Spring Boot + Mybatis多數(shù)據(jù)源和動(dòng)態(tài)數(shù)據(jù)源配置方法,需要的朋友參考下吧
    2018-01-01
  • MyBatis Plus關(guān)閉SQL日志打印的方法

    MyBatis Plus關(guān)閉SQL日志打印的方法

    這篇文章主要介紹了MyBatis-Plus如何關(guān)閉SQL日志打印,文中通過(guò)圖文結(jié)合講解的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2024-02-02
  • 基于jenkins上配置Credentials的2種方式

    基于jenkins上配置Credentials的2種方式

    這篇文章主要介紹了基于jenkins上配置Credentials的2種方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Java實(shí)現(xiàn)讀取鍵盤輸入保存到txt文件,再統(tǒng)計(jì)并輸出每個(gè)單詞出現(xiàn)次數(shù)的方法

    Java實(shí)現(xiàn)讀取鍵盤輸入保存到txt文件,再統(tǒng)計(jì)并輸出每個(gè)單詞出現(xiàn)次數(shù)的方法

    這篇文章主要介紹了Java實(shí)現(xiàn)讀取鍵盤輸入保存到txt文件,再統(tǒng)計(jì)并輸出每個(gè)單詞出現(xiàn)次數(shù)的方法,涉及java文件I/O操作及字符串遍歷、運(yùn)算實(shí)現(xiàn)統(tǒng)計(jì)功能相關(guān)技巧,需要的朋友可以參考下
    2017-07-07
  • SpringBoot2.0如何啟用https協(xié)議

    SpringBoot2.0如何啟用https協(xié)議

    這篇文章主要介紹了SpringBoot2.0如何啟用https協(xié)議,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • Callable實(shí)現(xiàn)多線程步驟詳解

    Callable實(shí)現(xiàn)多線程步驟詳解

    這篇文章主要介紹了Callable實(shí)現(xiàn)多線程步驟詳解,Callable是一個(gè)接口,用于實(shí)現(xiàn)多線程,與實(shí)現(xiàn)Runnable類似,但是功能更強(qiáng)大,該方法可以在任務(wù)結(jié)束后提供一個(gè)返回值,需要的朋友可以參考下
    2023-10-10

最新評(píng)論