<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Java 中驗證碼的使用

科技綠洲 ? 來源:了不起 ? 作者:了不起 ? 2023-09-25 11:11 ? 次閱讀

今天我們講一下在 Java 中驗證碼的使用。

驗證碼生成

本效果是利用easy-captcha工具包實現,首先需要添加相關依賴到pom.xml中,代碼如下:

< dependency >
    < groupId >com.github.whvcse< /groupId >
    < artifactId >easy-captcha< /artifactId >
    < version >1.6.2< /version >
< /dependency >

驗證碼格式

easy-captcha驗證碼工具支持GIF、中文、算術等類型,分別通過下面幾個實例對象實現:

  • SpecCaptcha(PNG類型的靜態圖片驗證碼)
  • GifCaptcha(Gif類型的圖片驗證碼)
  • ChineseCaptcha(GIF類型中文圖片驗證碼)
  • ArithmeticCaptcha(算術類型的圖片驗證碼)

字符類型分為以下幾種:

  • TYPE_DEFAULT:數字和字母混合
  • TYPEONLYNUMBER:純數字
  • TYPEONLYCHAR:純字母
  • TYPEONLYUPPER:純大寫字母
  • TYPEONLYLOWER:純小寫字母
  • TYPENUMAND_UPPER:數字和大寫字母混合

后端邏輯的實現

package com.yanx.controller;
 
import com.wf.captcha.SpecCaptcha;
import com.wf.captcha.base.Captcha;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.thymeleaf.util.StringUtils;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
 
@Controller
public class KapchaController {
    @GetMapping("/kaptcha")
    public void defaultKaptcha(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException {
        httpServletResponse.setHeader("Cache-Control","no-store");
        httpServletResponse.setHeader("Pragma","no-cache");
        httpServletResponse.setDateHeader("Expires",0);
        httpServletResponse.setContentType("image/gif");
 
        //三個參數分別為寬、高、位數
        SpecCaptcha captcha=new SpecCaptcha(75,30,4);
 
        //設置類型為數字和字母混合
        captcha.setCharType(Captcha.TYPE_DEFAULT);
 
        //設置字體
        captcha.setCharType(Captcha.FONT_9);
 
        //驗證碼存入session
        httpServletRequest.getSession().setAttribute("verifyCode",captcha.text().toLowerCase());
 
        //輸出圖片流
        captcha.out(httpServletResponse.getOutputStream());
    }
 
}

這里控制器新增了defaultKaptcha()方法,該方法所攔截處理的路徑為/kaptcha

前端邏輯的實現

在static目錄中新建kaptcha.html頁面,代碼如下:

< !DOCTYPE html >
< html lang="en" >
< head >
    < meta charset="UTF-8" >
    < title >驗證碼< /title >
< /head >
< body >
 < img src="/kaptcha" onclick="this.src='/kaptcha?t=new Date()'" >
< /body >
< /html >

訪問后端驗證碼路徑/kaptcha,驗證碼為圖片形式。onclick方法為點擊該標簽時可以動態切換顯示驗證碼。

啟動Spring Boot項目,打開瀏覽器輸入地址:

http://localhost:8080/kaptcha.html

效果如下:

圖片

驗證碼驗證

后端代碼

package com.yanx.controller;
 
import com.wf.captcha.SpecCaptcha;
import com.wf.captcha.base.Captcha;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.thymeleaf.util.StringUtils;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
 
@Controller
public class KapchaController {
    @GetMapping("/kaptcha")
    public void defaultKaptcha(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException {
        httpServletResponse.setHeader("Cache-Control","no-store");
        httpServletResponse.setHeader("Pragma","no-cache");
        httpServletResponse.setDateHeader("Expires",0);
        httpServletResponse.setContentType("image/gif");
 
        //三個參數分別為寬、高、位數
        SpecCaptcha captcha=new SpecCaptcha(75,30,4);
 
        //設置類型為數字和字母混合
        captcha.setCharType(Captcha.TYPE_DEFAULT);
 
        //設置字體
        captcha.setCharType(Captcha.FONT_9);
 
        //驗證碼存入session
        httpServletRequest.getSession().setAttribute("verifyCode",captcha.text().toLowerCase());
 
        //輸出圖片流
        captcha.out(httpServletResponse.getOutputStream());
    }
 
    @GetMapping("/verify")
    @ResponseBody
    public String verify(@RequestParam("code") String code, HttpSession session){
        if(StringUtils.isEmpty(code)){
            return "驗證碼不能為空";
        }
        String kapchaCode = session.getAttribute("verifyCode")+"";
        if(StringUtils.isEmpty(kapchaCode)||!code.toLowerCase().equals(kapchaCode)){
            return "驗證碼輸入錯誤";
        }
        return "驗證成功";
    }
}

前端代碼

< !DOCTYPE html >
< html lang="en" >
< head >
    < meta charset="UTF-8" >
    < title >驗證碼驗證< /title >
< /head >
< body >
 
< img src="/kaptcha" onclick="this.src='/kaptcha?d=new Date()'" >
 
< br >
< input type="text" maxlength="5" id="code" placeholder="請輸入驗證碼"/ >
< button id="verify" >驗證< /button >
< br/ >
< p id="verifyResult" >< /p >
 
< /body >
 
< script src="https://s3.pstatp.com/cdn/expire-1-M/jquery/3.3.1/jquery.min.js" >< /script >
< script type="text/javascript" >
  $(function(){
  //驗證按鈕點擊事件
   $('#verify').click(function(){
    var code=$('#code').val();
    $.ajax({
      type:'GET',//方法類型
      url:'/verify?code='+code,
      success:function(result){
        $('#verifyResult').html(result);
      },
      error:function(){
        alert('請求失敗');
      },
    });
   });
  });
< /script >
< /html >

效果

圖片

圖片

圖片

結束語

生成驗證碼功能還是比較常用的,所以記錄整理一下,方便以后回顧,如果有幫到你們的地方倍感榮幸,有路過的大佬還望不吝雅教!

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    19

    文章

    2905

    瀏覽量

    103111
  • 瀏覽器
    +關注

    關注

    1

    文章

    995

    瀏覽量

    34530
  • 代碼
    +關注

    關注

    30

    文章

    4567

    瀏覽量

    66998
  • 驗證碼
    +關注

    關注

    2

    文章

    20

    瀏覽量

    4366
收藏 人收藏

    評論

    相關推薦

    鴻蒙原生應用/元服務開發-Serverless賬戶驗證碼的問題

    在應用/元服務早期使用過程,-Serverless賬戶驗證碼的格式是[AGC][應用/元服務名稱],如下圖。 但是,在最近,[應用/元服務]名稱直接變成了【default】,用戶收到這種驗證碼后,心里存有疑慮的,這是哪里配置或
    發表于 12-27 15:55

    織夢dedecms登陸提示“驗證碼不正確”的完整解決方案

    很多朋友碰到了網站登陸的時候遇到了驗證碼不正確,考慮到剛剛設置了網站文件夾的權限,估計是權限不夠造成的,后來經過了解,dedecms的驗證碼是data目錄的session文件夾,在服務器上把
    發表于 03-10 23:53

    10種意想不到的驗證碼風格設計

    simpleCaptcha玩具驗證碼,選一個吧。7. slideLock拖動滾動條來解鎖吧。8. Captcha PHP動畫驗證碼。9. NuCaptcha輸入flash視頻的紅字母就對了。10.
    發表于 05-05 14:03

    什么時候才能發帖不需要驗證碼?

    每次發帖都要驗證碼,什么時候才能發帖不需要驗證碼?
    發表于 06-04 19:17

    12306圖片驗證碼難倒了誰?

    ``近日,朋友圈多出現搶票驗證碼的刷屏,多地多方向的春運火車票進入“秒殺”狀態,根據最長60天的預售期,12月10日(本周四)將開售除夕火車票,歸家的游子將面臨售票高峰。然而,要想“秒殺”到一張車票
    發表于 12-08 10:29

    論壇注冊時不顯示驗證碼

    論壇注冊時不顯示驗證碼啊,提交時提示驗證碼錯誤,希望早點解決,這是用別人的號發的?。。。。。。。。。?!
    發表于 03-01 21:45

    無法驗證郵箱,總是提示驗證碼錯誤,驗證碼明明是正確的。

    `無法驗證郵箱,總是提示驗證碼錯誤,驗證碼明明是正確的。是不是系統的bug?`
    發表于 05-12 10:41

    為什么短信驗證碼在我們生活中頻頻出現

    隨著時代的進步和科學技術的發展,越來越多的企業已經離不開短信驗證碼發送平臺了,因為它可以幫助企業處理大量的用戶信息,提高接收短信驗證碼的經驗意識。大型網站提供了短信驗證碼功能,更準確、更安全地保證了
    發表于 04-16 23:12

    一文解析驗證碼與打平臺的攻防對抗

    1、驗證碼與打平臺的攻防對抗  眾所周知,驗證碼的出現是為了區分人和機器,但隨著科技的發展,黑產從業者的可圖之利增多,驗證碼的戰場也進入了一段破解與抗破解的持久博弈?! ?/div>
    發表于 09-28 11:02

    java圖形驗證碼生成的設計實現

    ;/Kaptcha</url-pattern></servlet-mapping>html添加驗證碼標簽,并綁定javascript事件:<
    發表于 10-21 14:42

    平臺是如何高效的破解市面上各家驗證碼平臺的各種形式驗證碼的?

    點選類驗證碼。所以機器破解的主要方向是通過識別圖片中的相關驗證要素來進行破解,例如識別滑動驗證碼的缺口,點選驗證碼的文字要素和數字要素,其
    發表于 11-01 15:21

    RT-Thread studio sdk manager下載鏡像為何沒有圖形驗證碼?

    rt-thread studio sdk manager下載鏡像為何沒有圖形驗證碼?正常從gitee下載代碼會進行圖形驗證但是為何在Rt-thread Studio中下載卻沒有提示驗證,這是用什么技術實現的
    發表于 02-15 10:23

    【國民技術N32項目移植】手機驗證碼項目移植4--手機驗證碼計算

    ,再從device_id取一位,一共6位作為驗證碼。TOTP算法依賴以下參數:device_id:設備id,實際項目中跟設備綁定,由服務器下發。t_utc:當前網絡時間,是UTC時間,不是北京時間
    發表于 02-24 14:45

    以一個真實網站的驗證碼為例,實現了基于一下KNN的驗證碼識別

    很多網站登錄都需要輸入驗證碼,如果要實現自動登錄就不可避免的要識別驗證碼。本文以一個真實網站的驗證碼為例,實現了基于一下KNN的驗證碼識別。
    的頭像 發表于 12-24 17:27 ?7455次閱讀

    驗證碼到底在驗證啥?聊一聊驗證碼是怎么為難我們人類的

    在文章開頭,老狐先給大家玩一個驗證碼的游戲,猜出圖中驗證碼字母。
    的頭像 發表于 08-12 10:25 ?1559次閱讀
    <b class='flag-5'>驗證碼</b>到底在<b class='flag-5'>驗證</b>啥?聊一聊<b class='flag-5'>驗證碼</b>是怎么為難我們人類的
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>