springboot验证码生成以及验证功能举例详解

2023-05-16 0 3,751

目录

1.easy-captcha工具

生成验证码的方式有许多种,这里选择的是easy-captcha工具包。

github开原地址为:easy-captcha工具包

其支持Java图形验证码,支持gif、中文、算术等类型,可用于Java Web、JavaSE等项目。

2添加依赖

首先需要将easy-captcha的依赖配置文件增加到pom.xml文件中。

开源项目中已经写好了导入依赖语句复制粘贴过去即可。

springboot验证码生成以及验证功能举例详解

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

3.验证码字符类型

springboot验证码生成以及验证功能举例详解

使用方法:

//生成验证码对象
SpecCaptcha captcha = new SpecCaptcha(130, 48, 5);
//设置验证码的字符类型
captcha.setCharType(Captcha.TYPE_ONLY_NUMBER);

4.字体设置

springboot验证码生成以及验证功能举例详解

如果不想使用内置字体也可以使用系统字体。使用方法如下:

//生成验证码对象
SpecCaptcha captcha = new SpecCaptcha(130, 48, 5);

// 设置内置字体
captcha.setFont(Captcha.FONT_1); 

// 设置系统字体
captcha.setFont(new Font(\"楷体\", Font.PLAIN, 28)); 

5验证码图片输出

这里可以选择输出为文件流,这是比较常见的处理方式。当然,也有一些Web项目会使用base64编码的图片。这两种方式easy-captcha都支持。
base64编码的输出方法如下所示:

SpecCaptcha specCaptcha = new SpecCaptcha(130, 48, 5);
specCaptcha.toBase64();

// 如果不想要base64的头部data:image/png;base64,
specCaptcha.toBase64(\"\");  // 加一个空的参数即可

输出到磁盘上的方法如下所示:

FileOutputStream outputStream = new FileOutputStream(new File(\"C:/captcha.png\"))
SpecCaptcha specCaptcha = new SpecCaptcha(130, 48, 5);
specCaptcha.out(outputStream);

该段代码为生成一张图片并保存到磁盘目录中,这里可以使用easy-captcha工具自带的out()方法输出。而在开发Web项目时,则会使用Response对象的输出流进行验证码的输出。

6.生成并显示验证码

6.1后端

在controller包中新建KaptchaController类,就可以新建一个方法。在方法里使用GifCaptcha可以生成一个PNG类型的验证码对象,并以图片流的方式输出到前端以供显示,代码如下所示:

@Controller
public class KaptchaController {
    @GetMapping(\"/kaptcha\")
    public void defaultKaptcha(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception{
        httpServletResponse.setHeader(\"Cache-Control\",\"no-store\");
        httpServletResponse.setHeader(\"Pragma\",\"no-cache\");
        httpServletResponse.setDateHeader(\"Expires\",0);
        httpServletResponse.setContentType(\"image/gif\");

        //生成验证码对象,三个参数分别是宽、高、位数
        SpecCaptcha captcha = new SpecCaptcha(130, 48, 5);
        //设置验证码的字符类型为数字和字母混合
        captcha.setCharType(Captcha.TYPE_DEFAULT);
        // 设置内置字体
        captcha.setCharType(Captcha.FONT_1);
        //验证码存入session
        httpServletRequest.getSession().setAttribute(\"verifyCode\",captcha.text().toLowerCase());
        //输出图片流
        captcha.out(httpServletResponse.getOutputStream());
    }
}

这里在控制器中新增了defaultKaptcha()方法,该方法所拦截处理的路径为/kaptcha。在前端访问该路径后就可以接收一个图片流并显示在浏览器页面上。

6.2前端

在static目录中新建kaptcha.html页面,在该页面中显示验证码,代码如下所示:

<!DOCTYPE html>
<html lang=\"en\">
<head>
    <meta charset=\"UTF-8\">
    <title>验证码显示</title>
</head>
<body>
<img src=\"/kaptcha\" onclick=\"this.src=\'/kaptcha?d=\'+new Date()*1\" />
</body>
</html>

首先访问后端验证码路径/kaptcha,由于验证码是图片形式,所以将其显示在img标签中。然后定义onclick方法,在点击该img标签时可以动态切换显示一个新的验证码。点击时访问的路径为’/kaptcha?d='+new Date()*1,即原来的验证码路径后面带上一个时间戳参数d。时间戳是会变化的,所以每次点击都会是一个与之前不同的请求。如果不这样处理的话,由于浏览器的缓存机制,在点击刷新验证码后可能不会重新发送请求,将导致在一段时间内一直显示同一张验证码图片。

在编码完成后,启动Spring Boot项目。在启动成功后打开浏览器并输入验证码显示的测试页面地址

http://localhost:8080/kaptcha

效果如下:

springboot验证码生成以及验证功能举例详解

7 验证码的输入验证

一般的做法是在后端生成验证码后,首先对当前生成的验证码内容进行保存,可以选择保存在session对象中,或者保存在缓存中,或者保存在数据库中。然后,返回验证码图片并显示到前端页面。用户在识别验证码后,在页面对应的输入框中填写验证码并向后端发送请求,后端在接到请求后会对用户输入的验证码进行验证。如果用户输入的验证码与之前保存的验证码不相等的话,则返回“验证码错误”的提示消息且不会进行后续的流程,只有验证成功才会继续后续的流程。

7.1后端

在KaptchaController类中新增verify()方法,代码如下所示:

    public String verify(@RequestParam(\"code\") String code, HttpSession session){
        if (!StringUtils.hasLength(code)){
            return \"验证码不能为空\";
        }
        String kaptchaCode = session.getAttribute(\"verifyCode\")+\"\";
        if (!StringUtils.hasLength(kaptchaCode)||!code.toLowerCase().equals(kaptchaCode)){
            return \"验证码错误\";
        }
        return \"验证成功\";
    }

该方法所拦截处理的路径为/verify,请求参数为code,即用户输入的验证码。在进行基本的非空验证后,与之前保存在session中的verifyCode值进行比较,如果两个字符串不相等则返回“验证码错误”的提示,二者相同则返回“验证码成功”的提示。

7.2前端

在static目录中新建verify.html,该页面会显示验证码,同时也包含供用户输入验证码的输入框和提交按钮,代码如下所示:

<!DOCTYPE html>
<html lang=\"en\">
<head>
    <meta charset=\"UTF-8\">
    <title>验证码测试</title>
</head>
<body>
<img src=\"/kaptcha\" onclick=\"this.src=\'/kaptcha?d=\'+new Date()*1\" />
<br>
<input type=\"text\" maxlength=\"5\" id=\"code\" placeholder=\"请输入验证码\" />
<button id=\"verify\">验证</button>
<br>
<p id=\"verifyResult\">
</p>
</body>
<!--jqGrid依赖jQuery,因此需要先引入jquery.min.js文件,下方地址为字节跳动提供的cdn地址-->
<script src=\"http://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) {
                //将验证结果显示在p标签中
                    $(\'#verifyResult\').html(result);
                },
                error:function () {
                    alert(\'请求失败\');
                },
            });
        });
    });
</script>
</html>

用户识别显示在页面上的验证码后,就可以在input框中输入验证码并点击“验证”按钮。在JS代码中已经定义了“验证”按钮的点击事件,一旦点击,就会获取用户在输入框中输入的内容,并将其作为请求参数向后端发送请求,验证用户输入的验证码是否正确,后端在处理完成后会返回处理结果,拿到处理结果就显示在id为verifyResult的p标签中。

springboot验证码生成以及验证功能举例详解

总结

资源下载此资源下载价格为1小猪币,终身VIP免费,请先
由于本站资源来源于互联网,以研究交流为目的,所有仅供大家参考、学习,不存在任何商业目的与商业用途,如资源存在BUG以及其他任何问题,请自行解决,本站不提供技术服务! 由于资源为虚拟可复制性,下载后不予退积分和退款,谢谢您的支持!如遇到失效或错误的下载链接请联系客服QQ:442469558

:本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可, 转载请附上原文出处链接。
1、本站提供的源码不保证资源的完整性以及安全性,不附带任何技术服务!
2、本站提供的模板、软件工具等其他资源,均不包含技术服务,请大家谅解!
3、本站提供的资源仅供下载者参考学习,请勿用于任何商业用途,请24小时内删除!
4、如需商用,请购买正版,由于未及时购买正版发生的侵权行为,与本站无关。
5、本站部分资源存放于百度网盘或其他网盘中,请提前注册好百度网盘账号,下载安装百度网盘客户端或其他网盘客户端进行下载;
6、本站部分资源文件是经压缩后的,请下载后安装解压软件,推荐使用WinRAR和7-Zip解压软件。
7、如果本站提供的资源侵犯到了您的权益,请邮件联系: 442469558@qq.com 进行处理!

猪小侠源码-最新源码下载平台 Java教程 springboot验证码生成以及验证功能举例详解 https://www.20zxx.cn/705724/xuexijiaocheng/javajc.html

猪小侠源码,优质资源分享网

常见问题
  • 本站所有资源版权均属于原作者所有,均只能用于参考学习,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,建议提前注册好百度网盘账号,使用百度网盘客户端下载
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务