当前位置: 首页 > news >正文

【spring boot 实现图片验证码 前后端】

导入hutool依赖

		<!--hutool-->
		<dependency>
			<groupId>cn.hutool</groupId>
			<artifactId>hutool-all</artifactId>
			<version>5.8.36</version>

获取验证码接口

    @Autowired
    private Captcha captcha;
    private final static Long VALIDATE_CODE = 60 * 1000L;
    @RequestMapping("/getCaptcha")
    public void getCaptcha(HttpServletResponse response, HttpSession session) throws IOException {
        // 设置响应内容类型
        response.setContentType("image/png");
        // 直接把验证码写入浏览器,没有返回值
        LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(captcha.getWidth(), captcha.getHeight(),4,4);
        String code = lineCaptcha.getCode();
        session.setAttribute(captcha.getSession().getKey(), code);
        session.setAttribute(captcha.getSession().getDate(),new Date());// 获取当前时间
        lineCaptcha.write(response.getOutputStream());
    }

检查验证码接口

    @RequestMapping("/check")
    public boolean check(String mycaptcha, HttpSession session) {
        System.out.println("[captchaCheck]用户输入的验证码:" + mycaptcha);
        String code = (String)session.getAttribute(captcha.getSession().getKey());
        if(!StringUtils.hasLength(code)) {
            return false;
        }
        Date date = (Date)session.getAttribute(captcha.getSession().getDate());
        if(mycaptcha.equalsIgnoreCase(code) && VALIDATE_CODE >= System.currentTimeMillis() - date.getTime()) {
            return true;
        }
        return false;
    }

前后端交互

<img id="captcha_img" src="/captcha/getCaptcha" alt="看不清?换一张" onclick="change()">
let check = false;
    function change() {
        event.preventDefault();  // 阻止表单默认提交行为
        $.ajax({
            type: "get",
            url: "/captcha/getCaptcha",
            success: function (result) {
                console.log("[getCaptcha]刷新的验证码:" + result);
                $("#captcha_img").attr("src", "/captcha/getCaptcha");
            }
        })
    }
    function login() {
        event.preventDefault();  // 阻止表单默认提交行为
        $.ajax({
            type: "get",
            url: "/login",
            data: {
                username: $("#username").val(),
                password: $("#password").val(),
            },
            success: function (result) {
                console.log(result);
                if(result === false) {
                    alert("用户名或密码错误!!");

                }
                else if(result === true && check === false) {
                    alert("验证码错误!!");
                    location.reload();
                }
                else if(result === true && check === true) {
                    location.href = "recognize.html";
                }
                // if(result === true && check === true) {
                //     location.href = "recognize.html";
                // }
                // else {
                //     alert("用户名或密码错误!!");
                // }
            }
        })
        $.ajax({
            type: "post",
            url: "/captcha/check",
            data: {
                mycaptcha: $("#captcha").val() 
            },
            success: function (result) {
                console.log(result);
                if(result === false) {
                    check = false;
                    // alert("验证码错误!!");
                    // location.reload();
                }  
                else {
                    check = true;
                }
            }
        })
    }

测试

在这里插入图片描述

相关文章:

  • STM32微控制器_03_GPIO原理与应用
  • 力扣No.376.摆动序列
  • LightGBM + TA-Lib A股实战进阶:Optuna调优与Plotly可视化详解
  • 【pptx-preview】react+pptx预览
  • 蓝牙系统的核心组成解析
  • 拥抱健康养生,开启活力生活
  • {瞎掰} 手机安装app问题:app签名,手机 or OS官方商店 其他非官方app源,安全防护 突破限制
  • gitee 远程修改完密码本地提交出错的解决方案
  • 网络性能指标
  • TK矩阵系统的软件服务
  • tuh_eeg数据集
  • 文档搜索引擎项目测试
  • 国密系列加密技术及其在爬虫逆向中的应用研究
  • linux按照nginx
  • Day 18:数字 1 的个数
  • DFT mode下hard phy STA Nopath
  • Go红队开发—日志打印优化
  • 子序列问题写法
  • 【嵌入式】复刻SQFMI开源的Watchy墨水屏电子表——(1)硬件部分
  • 方法的使用
  • 英国首相斯塔默一处房产发生火灾
  • 外交部就习近平主席将出席中拉论坛第四届部长级会议开幕式介绍情况
  • 重庆三峡学院回应“85万元中标设备,网购价不到300元”:已着手解决
  • “科创板八条”后百单产业并购发布,披露交易金额超247亿
  • 明星同款撕拉片,为何能炒到三四百一张?
  • 融创中国:今年前4个月销售额约112亿元