Java生成图形验证码

1、加依赖

复制代码
<dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.16</version>
        </dependency>

2、写接口,这块不需要登录成功才能操作的,所以写controller就行了,不涉及服务

复制代码
package com.hmblogs.backend.controller;

import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.LineCaptcha;
import com.hmblogs.backend.config.CaptchaProperties;
import com.hmblogs.backend.util.JedisUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import redis.clients.jedis.Jedis;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@RestController
@RequestMapping("/captcha")
public class CaptchaController {

    @Autowired
    private CaptchaProperties captchaProp;

    @RequestMapping("/get")
    public void getCaptcha(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
        // 定义图形验证码的长和宽(配置默认值)
        LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(captchaProp.getWidth(), captchaProp.getHeight());
        // 细节问题,不影响程序
        // 设置返回类型
        response.setContentType("image/jpeg");
        // 静止缓存
        response.setHeader("Progma", "No-cache");
        try {
            // 图形验证码写出,可以写出到文件,也可以写出到流
            lineCaptcha.write(response.getOutputStream());
            // 这里是缓存图形验证码逻辑,也可以放库里,或者session里,但要用用户名区别,因为还没登录所以不要使用用户ID区别
            // 在相关功能(例如登录)的时候,要对应验证判断一下
            Jedis jedis = JedisUtil.getJedisConn();
            String username = request.getParameter("username");
            jedis.setex("imageToken:"+username,2*60, lineCaptcha.getCode());
            // 关流
            response.getOutputStream().close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

}

3、对应的配置文件

复制代码
package com.hmblogs.backend.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Data
@Configuration
@ConfigurationProperties(prefix = "captcha")
public class CaptchaProperties {
    private Integer width;
    private Integer height;
}

4、对应的配置文件的配置

复制代码
captcha:
  width: 200
  height: 100

5、开发页面,使用的是vue的ref来控制页面图形验证码区域显示,点击图片区域则会换一个图形验证码

6、验证

页面加载时,有调用该接口

查看redis的缓存,和页面看到的一致

点击图形区域,发现又调用了该接口

查看redis缓存

验证完毕。

相关推荐
发现一只大呆瓜16 小时前
深度解密 Rollup 插件开发:核心钩子函数全生命周期图鉴
前端·vite
java_nn17 小时前
一文了解前端技术
前端
发现一只大呆瓜17 小时前
深度解析 Rollup 配置与 Vite 生产构建流程
前端·vite
小码哥_常17 小时前
安卓黑科技:让手机成为你的“跌倒保镖”
前端
小李子呢021118 小时前
前端八股Vue---Vue2和Vue3的区别,set up的用法
前端·javascript·vue.js
m0_6470579618 小时前
Harness Engineering 实践指南
前端
JJay.19 小时前
Android BLE 稳定连接的关键,不是扫描,而是 GATT 操作队列
android·服务器·前端
一 乐19 小时前
电影院|基于springboot + vue电影院购票管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·电影院购票管理管理系统
星空椰19 小时前
JavaScript 进阶基础:函数、作用域与常用技巧总结
开发语言·前端·javascript
奔跑的呱呱牛19 小时前
@giszhc/vue-page-motion:Vue3 路由动画怎么做才“丝滑”?(附在线示例)
前端·javascript·vue.js