首頁 > Java > java教程 > 主體

怎麼使用java搞定網站登入驗證碼

PHPz
發布: 2023-05-10 18:28:06
轉載
1561 人瀏覽過

驗證碼產生

本效果是利用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=&#39;/kaptcha?t=new Date()&#39;" alt="怎麼使用java搞定網站登入驗證碼" >
</body>
</html>
登入後複製

存取後端驗證碼路徑/kaptcha,驗證碼為圖片形式。 onclick方法為點選該標籤時可動態切換顯示驗證碼。

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

#http://localhost:8080/kaptcha.html

效果如下:

怎麼使用java搞定網站登入驗證碼

驗證碼驗證

後端程式碼

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=&#39;/kaptcha?d=new Date()&#39;" alt="怎麼使用java搞定網站登入驗證碼" >
 


<input type="text" maxlength="5" id="code" placeholder="请输入验证码"/>
<button id="verify">验证</button>


<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(){
  //验证按钮点击事件
   $(&#39;#verify&#39;).click(function(){
    var code=$(&#39;#code&#39;).val();
    $.ajax({
      type:&#39;GET&#39;,//方法类型
      url:&#39;/verify?code=&#39;+code,
      success:function(result){
        $(&#39;#verifyResult&#39;).html(result);
      },
      error:function(){
        alert(&#39;请求失败&#39;);
      },
    });
   });
  });
</script>
</html>
登入後複製
效果

怎麼使用java搞定網站登入驗證碼

怎麼使用java搞定網站登入驗證碼

怎麼使用java搞定網站登入驗證碼#

以上是怎麼使用java搞定網站登入驗證碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板