SpringBoot图片验证码

SpringBoot图片验证码“原生js+SpringBoot+hutool工具”实现浏览器验证码功能,点击可刷新。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

“原生 js + SpringBoot + hutool 工具” 实现浏览器验证码功能,点击可刷新。

一、理解 “ 服务器 / 浏览器 ”沟通流程(3步)

  • 第1步:浏览器使用<img src="/test/controller”>标签请求特定 Controller 路径。
  • 第2步:服务器 Controller 返回图片的二进制数据。
  • 第3步:浏览器接收到数据,显示图片。

image-20220812171046578


二、开发前准备:

  • Spring Boot开发常识
  • hutool工具(hutool是一款Java辅助开发工具,利用它可以快速生成验证码图片,从而避免让我们编写大量重复代码,具体使用请移至官网)
<!-- pom 导包:hutool 工具 -->
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-captcha</artifactId>
    <version>5.8.5</version>
</dependency>

三、 代码实现

【 index.html 】页面

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <title>验证码页面</title>
</head>
<body>
  
<form action="#" method="post">
  
  	<!-- img标签负责向服务器 Controller 请求图片资源 -->
    <img src="/test/code" id="code" onclick="refresh();">
  
</form>
  
</body>

<!-- “点击验证码图片,自动刷新” 脚本 -->
<script> function refresh() { 
      document.getElementById("code").src = "/test/code?time" + new Date().getTime(); } </script>
</html>

【SpringBoot后端】

@RestController
@RequestMapping("test")
public class TestController { 
   
  
    @Autowired
    HttpServletResponse response;
    @Autowired
    HttpSession session;

    @GetMapping("code")
    void getCode() throws IOException { 
   
   		  // 利用 hutool 工具,生成验证码图片资源
        CircleCaptcha captcha = CaptchaUtil.createCircleCaptcha(200, 100, 4, 5);
        // 获得生成的验证码字符
        String code = captcha.getCode();
        // 利用 session 来存储验证码
        session.setAttribute("code",code);
      	// 将验证码图片的二进制数据写入【响应体 response 】
        captcha.write(response.getOutputStream());
    }
}

四、“点击验证码图片自动刷新” 是如何实现的 ?

  HTML 规范规定,在 <img src=“xxx”> 标签中,每当 src 路径发生变化时,浏览器就会自动重新请求资源。所以我们可以编写一个简单的 js 脚本,只要验证码图片被点击,src 路径就会被加上当前【时间戳】,从而达到改变 src 路径的目的。

 <img src="/test/code" id="code" onclick="refresh();">

......

<!-- “点击验证码图片,自动刷新” 脚本 -->
<script> function refresh() { 
      document.getElementById("code").src = "/test/code?time" + new Date().getTime(); } </script>

五、最终效果

code

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/181382.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 腾讯会议——录制的视频如何正常观看(转为MP4格式)

    腾讯会议——录制的视频如何正常观看(转为MP4格式)操作步骤1.打开腾讯会议2.点击**历史会议**3.点击你录制的会议4.点击**录制详情**5.点击**转码**1.打开腾讯会议2.点击历史会议3.点击你录制的会议4.点击录制详情5.点击转码完成这5步,即可将所保存的视频转为MP4格式,便于观看。…

  • c++ offsetof_函数offset的用法

    c++ offsetof_函数offset的用法宏offsetof标准库stddef.h定义size_toffsetof(type,member);分析C库宏offsetof(type,member)会生成一个类型为size_t的整型常量,它是一个结构成员(member)相对于结构(type)开头的字节偏移量。成员是由member给定的,结构的名称是在type中给定的。type–这是一个参数class类型,是结…

  • 批处理命令——set[通俗易懂]

    批处理命令——set[通俗易懂]【1】set命令简介  set,设置。【2】set命令使用  1.打印系统环境变量。set命令可以打印系统所有的环境变量信息。  应用示例:新建文本文件,命名为set_sys,修改文件类型为bat,用Notepad++打开编辑内容如下:1@echooff2::set显示所有系统环境变量3::set(暂时屏蔽掉,需要执行请去掉::)4pause>nul5::setc显示所有以C开头的环境变量(不区分大小写)6setc7pause

  • golang开发环境搭建_golang web框架

    golang开发环境搭建_golang web框架Golang环境搭建———————Windows平台应先安装MinGW 一、Windows平台1.下载官方提供的相应平台的安装包:https://code.google.com/p/go/downloads/list2.将下载的安装包解压到自己指定的Golang安装目录下(假设为:D:\Go)。3.添加如下环

    2022年10月12日
  • 求复数的对数[通俗易懂]

    求复数的对数[通俗易懂]其实除了0以外,复数是都可以求解对数的。用欧拉公式可以简单的得到结果。

    2022年10月29日
  • bigdecimal类型比较大小「建议收藏」

    bigdecimal类型比较大小「建议收藏」比较方法:BigDecimal类提供compareTo()方法来比较两个数的大小,例如:a=b返回0,a<b返回-1,a>b返回1,通过这三种比较返回的结果,我们还可“以比较a!=b、a>=b和a<=b这三种情况。importjava.math.BigDecimal;publicclassApplication{publicstaticvoidmain(String[]args){BigDecimala

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号