首页 > Java > java教程 > 怎么使用java搞定网站登录验证码

怎么使用java搞定网站登录验证码

PHPz
发布: 2023-05-10 18:28:06
转载
1596 人浏览过

验证码生成

本效果是利用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;">
</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;">
 


<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
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板