SpringBoot实现图片验证码

引入依赖

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

代码实现

package com.qiangesoft.captcha.controller;import com.wf.captcha.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;/*** 验证码接口** @author qiangesoft* @date 2024-05-11*/
@RequestMapping("/captcha")
@RestController
public class MyCaptchaController {// 验证码文本类型public static final int TYPE_DEFAULT = 1;  // 字母数字混合public static final int TYPE_ONLY_NUMBER = 2;  // 纯数字public static final int TYPE_ONLY_CHAR = 3;  // 纯字母public static final int TYPE_ONLY_UPPER = 4;  // 纯大写字母public static final int TYPE_ONLY_LOWER = 5;  // 纯小写字母public static final int TYPE_NUM_AND_UPPER = 6;  // 数字大写字母/*** 数字验证码*/@GetMapping("/arithmetic")public void arithmetic(HttpServletResponse response) throws IOException {setResponse(response, "arithmetic.jpg");ArithmeticCaptcha arithmeticCaptcha = new ArithmeticCaptcha(150, 65);arithmeticCaptcha.setLen(3);arithmeticCaptcha.out(response.getOutputStream());}/*** 中文验证码*/@GetMapping("/chinese")public void chinese(HttpServletResponse response) throws IOException {setResponse(response, "chinese.jpg");ChineseCaptcha chineseCaptcha = new ChineseCaptcha(150, 65);chineseCaptcha.setLen(4);chineseCaptcha.out(response.getOutputStream());}/*** 中文gif验证码*/@GetMapping("/chineseGif")public void chineseGif(HttpServletResponse response) throws IOException {setResponse(response, "chineseGif.gif");ChineseGifCaptcha chineseGifCaptcha = new ChineseGifCaptcha(150, 65);chineseGifCaptcha.setLen(4);chineseGifCaptcha.out(response.getOutputStream());}/*** gif验证码*/@GetMapping("/gif")public void gif(HttpServletResponse response) throws IOException {setResponse(response, "gif.gif");GifCaptcha gifCaptcha = new GifCaptcha(150, 65);gifCaptcha.setLen(4);gifCaptcha.setCharType(TYPE_ONLY_NUMBER);gifCaptcha.out(response.getOutputStream());}/*** 英文字母验证码*/@GetMapping("/spec")public void spec(HttpServletResponse response) throws IOException {setResponse(response, "spec.jpg");SpecCaptcha specCaptcha = new SpecCaptcha(150, 65);specCaptcha.setLen(4);specCaptcha.out(response.getOutputStream());}/*** 设置响应信息** @param response* @param fileName*/private void setResponse(HttpServletResponse response, String fileName) {response.setContentType("application/octet-stream;charset=utf-8");response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, StandardCharsets.UTF_8));}
}

测试

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/10436.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最少数量线段覆盖-华为OD

系列文章目录 文章目录 系列文章目录前言一、题目描述二、输入描述三、输出描述四、java代码五、测试用例 前言 本人最近再练习算法&#xff0c;所以会发布一些解题思路&#xff0c;希望大家多指教 一、题目描述 给定坐标轴上的一组线段&#xff0c;线段的起点和终点均为整数…

C++:类与对象—继承

类与对象—继承 一、继承是什么&#xff1f;二、继承定义三、基类和派生类对象赋值转换四、继承中的作用域五、派生类的默认成员函数六、继承与友元七、继承与静态成员八、复杂的菱形继承及菱形虚拟继承九、继承的总结和反思十、考察重点 一、继承是什么&#xff1f; 继承(inh…

知识付费系统需要哪些资质要求,教育机构教务工作计划内容有哪些?

每个培训教育机构都是由很多人员组成&#xff0c;作为教育机构&#xff0c;老师不必须&#xff0c;是必不可少的&#xff0c;但是除了老师之外还得配备一定数量的销售人员和教务工作者&#xff0c;教务老师其实也就是搞后勤的&#xff0c;但是是必须的&#xff0c;那么教育机构…

Java的时间类

1. 日期类 1.1 第一代日期类 1) Date: 精确到毫秒&#xff0c;代表特定的瞬间 2) SimpleDateFormat: 格式和解析日期的类 SimpleDateFormat 格式化和解析日期的具体类。它允许进行格式化(日期-→>文本)、解析(文本->日期)和规范化. import java.text.ParseExce…

Java基础(27)Web应用中web.xml文件中可以配置哪些内容

在Java Web应用中&#xff0c;web.xml文件&#xff08;也被称为部署描述符&#xff09;是一个核心的配置文件&#xff0c;它位于应用的WEB-INF目录下。web.xml文件中可以配置多种不同的组件和参数&#xff0c;它们用来定义和调整应用的行为。以下是一些web.xml中可以配置的内容…

Web3 Tools - 助记词生成(完整代码)

工具介绍 Web3Tools - 助记词生成 完整代码 代码路径 import React, { useState } from react; import Grid from mui/material/Grid; import Paper from mui/material/Paper; import Typography from mui/material/Typography; import Button from mui/material/Button; i…

接口自动化测试很难掌握吗?

一. 什么是接口测试 接口测试是一种软件测试方法&#xff0c;用于验证不同软件组件之间的通信接口是否按预期工作。在接口测试中&#xff0c;测试人员会发送请求并检查接收到的响应&#xff0c;以确保接口在不同场景下都能正常工作。 就工具而言&#xff0c;常见的测试工具有…

AI+招聘:ATS招聘系统让HR简历筛选精准度达95%!

一提起招聘过程&#xff0c;许多HR就会想到那堆叠如山的简历、让人眼花缭乱的招聘网站以及琐碎繁复的手动数据录入。据统计&#xff0c;平均每位HR每年要处理数百甚至上千份简历&#xff0c;耗费大量精力在初级筛选和跟进上。   市场调查机构近日发布的一份报告显示&#xff…

【深度学习】YOLO源码中的mAP计算代码的理解笔记(大部分代码逐行+基础解释)

提示&#xff1a;本篇博客是在阅读了YOLO源码中的mAP计算方法的代码后加上官方解释以及自己的debug调试理解每一步是怎么操作的。由于是大部分代码进行了逐行解释&#xff0c;所以篇幅过长。 文章目录 前言一、输入格式处理1.1 转换公式二、init&#xff1a;初始化2.1 iouv2.2 …

AND Sorting题解

AND Sorting题解 AND Sorting 详细 题解()题目原意解题思路这是代码🐬ZZZB. AND Sorting(我也是有底线的)AND Sorting 详细 题解() 洛谷 原题,CF 原题 洛谷 AC记录,CF AC记录 题目原意 给你一个由从 0 0 0 到 n − 1 n-1 n−1 的整数组成的排列 p p p (每个整数都…

如何在没有头文件的情况下调用动态库的类的私有成员函数

如何在没有头文件的情况下调用动态库的类成员函数 编写一个不存在虚函数的类测试代码 _ZN6CClass4showEv如何获取调用 源代码 https://github.com/TonyBeen/study/tree/master/dlopen 编写一个不存在虚函数的类 // class.h #pragma onceclass CClass { public:CClass();~CCla…

【Leetcode每日一题】 综合练习 - 电话号码的字母组合(难度⭐⭐)(75)

1. 题目解析 题目链接&#xff1a;电话号码的字母组合 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 算法设计思路 在解决这类问题时&#xff0c;我们需要认识到每个位置上的数字对应的字符集合是相互独立的&#…

什么是翘尾因素

在有关CPI 的分析文章和新闻稿件中&#xff0c;经常会出现“翘尾因素”或“翘尾影响” 等词汇&#xff0c;这是分析同比价格指数变动幅度时所特有的概念。那么什么是“翘尾因素” 或“翘尾影响”呢&#xff1f; 一、什么是翘尾因素 “翘尾因素”是指上年价格上涨&#xff08;…

使用scrollIntoView滚动元素到可视区域

1. 实现效果 点击顶部标签栏&#xff0c;让对应的内容出现在可视区域&#xff1a; 2. scrollIntoView () scrollIntoView 是一个内置的 JavaScript 方法&#xff0c;用于将元素滚动到视口可见的位置。它通常用于用户界面中&#xff0c;以便用户能轻松看到特定的元素。此方…

perf 中的 cpu-cycles event 介绍

perf 中的 cpu-cycles event 介绍 cycles简介 cycles事件记录处理器核心执行的时钟周期数。每个时钟周期代表处理器内部时钟振荡器的一个周期。这个事件通常用于衡量处理器的执行速度&#xff0c;因为它直接反映了指令执行所需的时间。一个较高的cycles计数可能意味着代码执行…

JavaScript中指定大小分割数组的一种实现

今天分享一个使用JavaScript分割数组为多个自数组的方法实现。我使用它的场景如下&#xff1a; 给定一个数组 arr 和指定大小 fixed&#xff1a; const arr [{id: 1,name: name1},{id: 2,name: name2},{id: 3,name: name3},{id: 4,name: name4},{id: 5,name: name5},{id: 6,…

2024版本idea集成SpringBoot + Ai 手写一个chatgpt 【推荐】

题目&#xff1a;SpringBoot OpenAi 在这里获取key和url&#xff1a;获取免费key base-url为这两个&#xff1a; 话不多说直接来&#xff01; 一、简介 Spring AI 是 AI 工程的应用框架。其目标是将 Spring 生态系统设计原则&#xff08;如可移植性和模块化设计&#xff…

暗区突围pc资格 暗区突围pc端测试资格获取

《暗区突围》的诞生&#xff0c;仿佛在游戏界投下了一枚深水炸弹&#xff0c;它不仅仅是射击游戏的新标杆&#xff0c;更是对玩家策略思维、生存直觉与团队协作能力的一次全面考验。在这个精心构建的虚拟战场中&#xff0c;每一次踏入暗区&#xff0c;都是对未知的探索&#xf…

【练习4】

1.两数之和 暴力&#xff1a; class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {int n nums.size();vector<int> res(2, -1); // 初始化结果为-1for (int i 0; i < n; i) {int temp nums[i];for (int j i 1; j <…

Python 技巧:满意的逗号放置

当你在 Python 中添加或删除列表、字典或集合中的项目时&#xff0c;记住总是将所有行结尾加一个逗号。这是一个非常有用的技巧&#xff0c;可以帮助你避免一些常见的问题。 不确定我所说的什么&#xff1f;让我给你一个快速示例。假设你在代码中有一個名单列表&#xff1a; …