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.hqwc.cn/news/691462.html

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

相关文章

【ubuntu】ubuntu-18.04开机卡在Starting User Manager for UID 120....问题解决方案

错误截图 解决方案 启动系统&#xff0c;开机界面单击按键esc键&#xff0c;注意需要将鼠标定位到菜单界面&#xff0c;移动键盘上下键选择Advanced options for Ubuntu 进入如下菜单&#xff0c;选择recovery mode 回车之后会弹出如下界面&#xff0c;选择如下root&#xff0…

windows@注册表介绍@注册表的查看和编辑操作

文章目录 abstractrefs注册表的主要组件包括根键极其缩写名称&#x1f47a;子键特性 查看注册表&#x1f47a;使用powershell查看路径下的子路径声明概念Get-ChildItem查看注册表路径下的项Set-Location进入注册表路径举例说明查看文件系统某个路径下的项查看某个注册表路径的项…

OpenGL导入的纹理图片错位

在OpenGL中导入图片的纹理照片的函数为 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, p_w, p_h, 0, GL_BGR, GL_UNSIGNED_BYTE, pic_data);其中p_w, p_h为图片的宽和高&#xff0c;pic_data为指向图片存储空间的的地址(unsigned char *类型) 在OpenGL中图片默认是4字节对齐的&…

[算法][数组][leetcode]2391. 收集垃圾的最少总时间

题目地址: https://leetcode.cn/problems/minimum-amount-of-time-to-collect-garbage/description/ 题解&#xff1a; class Solution {public int garbageCollection(String[] garbage, int[] travel) {int ans 0;//先计算收所有的垃圾需要多少时间for(String s :garbage){…

Vivado功耗之散热模型详解

目录 一、前言 二、热模型 三、结温计算 四、散热器计算 五、参考资料 一、前言 ​在功耗评估中&#xff0c;Vivado中report power流程以及XPE中都有关于environment的配置&#xff0c;该界面配置涉及到多个晦涩的概念&#xff0c;之前的文章中也对相关概念进行过翻译&…

深入理解WPF的ResourceDictionary

深入理解WPF的ResourceDictionary 介绍 在WPF中&#xff0c;ResourceDictionary用于集中管理和共享资源&#xff08;如样式、模板、颜色等&#xff09;&#xff0c;从而实现资源的重用和统一管理。本文详细介绍了ResourceDictionary的定义、使用和合并方法。 定义和用法 Res…

祝天下母亲节快乐!虚无!——早读(逆天打工人爬取热门微信文章解读)

练功加精力哦 引言Python 代码第一篇 人民日报【夜读】人与人之间最好的关系&#xff1a;遇事靠谱&#xff0c;懂得感恩第二篇 冯站长之家 三分钟新闻早餐结尾 感恩与善行 是人生旅途中的灯塔 怀感恩之心 行小善之事 它们将指引我们走向光明 引言 今天是母亲节 祝天下的所有母…

python零基础知识 - 定义列表的三种方式,循环列表索引值

这一小节&#xff0c;我们将从零基础的角度看一下&#xff0c;python都有哪些定义列表的方式&#xff0c;并且循环这个列表的时候&#xff0c;怎么循环&#xff0c;怎么循环他的索引值&#xff0c;怎么拿到的就是元素值。 说完循环&#xff0c;我们会说一说关键的break和contin…

Springboot+logback 详细配置

一、添加依赖 这里使用springboot3.0.2 依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency><dependency><groupId>org.projectlombok</grou…

【效率开发】游戏开发Debug效率方法总结

"程序员的一半生命都浪费在了调试上。" ——Brian Kernighan&#xff08;计算机科学家&#xff0c;曾参与开发C语言&#xff09; &#xff08;图片来源&#xff1a;forbesindia&#xff09; Debug无疑是程序员最头疼&#xff0c;也是耗费时间最多的一个环节&#xf…

【linux】详解linux基本指令

目录 cat more less head tail 时间 cal find grep zip/unzip tar bc uname –r 关机 小编一共写了两篇linux基本指令&#xff0c;这两篇涵盖了大部分初学者的必备指令&#xff0c;这是第二篇&#xff0c;第一篇详见http://t.csdnimg.cn/HRlVt cat 适合查看小文…

VP Codeforces Round 944 (Div 4)

感受&#xff1a; A~G 其实都不难&#xff0c;都可以试着补起来。 H看到矩阵就放弃了。 A题&#xff1a; 思路&#xff1a; 打开编译器 代码&#xff1a; #include <iostream> #include <vector> #include <algorithm> #define int long long using na…