java实现5种不同的验证码图片,包括中文、算式等,并返回前端

news2025/1/15 22:39:52

导入以下依赖

<!--图片验证码-->
        <dependency>
            <groupId>com.github.whvcse</groupId>
            <artifactId>easy-captcha</artifactId>
            <version>1.6.2</version>
        </dependency>

 编写controller

package com.anXin.user.controller;


import com.wf.captcha.*;
import com.wf.captcha.base.Captcha;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;

@Controller
public class KaptchaController {

    private static final Logger logger = LoggerFactory.getLogger(KaptchaController.class);
    public static HttpSession session;

    @RequestMapping(path = "/kaptcha",method = RequestMethod.GET)
    public void getKaptcha(HttpServletResponse response, HttpSession session) throws Exception {
        Random r=new Random();
        int a = r.nextInt(5) + 1;
        switch (a){
            case 1:get1(response, session);break;
            case 2:get2(response, session);break;
            case 3:get3(response, session);break;
            case 4:get4(response, session);break;
            case 5:get5(response, session);break;
        }
    }

    private void get1(HttpServletResponse response, HttpSession session){
        SpecCaptcha captcha = new SpecCaptcha(130, 40);
        System.out.println("验证码为:"+captcha.text());
        session.setAttribute("captcha",captcha.text());
        response.setContentType("image/png");
        try {
            OutputStream os = response.getOutputStream();
            captcha.out(os);
        } catch (IOException e) {
            logger.error("响应验证码失败" + e.getMessage());
        }
    }
    private void get2(HttpServletResponse response, HttpSession session) throws Exception {
        GifCaptcha gifCaptcha = new GifCaptcha(130, 40);
        gifCaptcha.setCharType(Captcha.TYPE_ONLY_UPPER);
        //设置字体
        gifCaptcha.setFont(Captcha.FONT_5);
        System.out.println("验证码为:"+gifCaptcha.text());
        session.setAttribute("captcha",gifCaptcha.text());
        response.setContentType("image/gif");
        OutputStream os = response.getOutputStream();
        gifCaptcha.out(os);
    }
    private void get3(HttpServletResponse response, HttpSession session){
        ChineseCaptcha chineseCaptcha = new ChineseCaptcha(130, 40);
        System.out.println("验证码为:"+chineseCaptcha.text());
        session.setAttribute("captcha",chineseCaptcha.text());
        response.setContentType("image/png");
        try {
            OutputStream os = response.getOutputStream();
            chineseCaptcha.out(os);
        } catch (IOException e) {
            logger.error("响应验证码失败" + e.getMessage());
        }
    }
    private void get4(HttpServletResponse response, HttpSession session){
        ChineseGifCaptcha chineseGifCaptcha = new ChineseGifCaptcha(130, 40);
        System.out.println("验证码为:"+chineseGifCaptcha.text());
        session.setAttribute("captcha",chineseGifCaptcha.text());
        response.setContentType("image/gif");
        try {
            OutputStream os = response.getOutputStream();
            chineseGifCaptcha.out(os);
        } catch (IOException e) {
            logger.error("响应验证码失败" + e.getMessage());
        }
    }
    private void get5(HttpServletResponse response, HttpSession session){
        ArithmeticCaptcha arithmeticCaptcha = new ArithmeticCaptcha(180, 40);
        //设置几位数的运算,几个数计算
        arithmeticCaptcha.setLen(3);
        //打印算式
        System.out.println("算式为:"+arithmeticCaptcha.getArithmeticString());
        System.out.println("验证码为:"+arithmeticCaptcha.text());
        session.setAttribute("captcha",arithmeticCaptcha.text());
        response.setContentType("image/png");
        try {
            OutputStream os = response.getOutputStream();
            arithmeticCaptcha.out(os);
        } catch (IOException e) {
            logger.error("响应验证码失败" + e.getMessage());
        }
    }
}

以上为随机生成五种不同效果的验证码图片,可以根据自己的需求灵活改写

测试结果

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

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

相关文章

Tessy 4.3.18

Tessy 4.3.18 windows 2692407267qq.com&#xff0c;更多内容请见http://user.qzone.qq.com/2692407267/

【无标题】uniapp引入萤石云 真机无法运行 踩坑集合

Uniapp 接入萤石云 踩坑 1.先用了 UIKit Javascript 就是在 pc端 那套流程 npm install ezuikit-jsimport EZUIKit from ezuikit-js;这套流程貌似只适用于pc端&#xff0c;我在接入uniapp的时候没看官网 以为都是一套流程&#xff0c;然后就在uniapp中也来了这一套&#xff0…

vue+neo4j(neo4j desktop安装和使用)

vueneo4j&#xff08;neo4j desktop安装和使用&#xff09; 本文目录 vueneo4j&#xff08;neo4j desktop安装和使用&#xff09;官网下载安装基本使用创建项目新增数据库连接数据库 使用cypher构建简单知识图谱创建节点创建关系删除节点及关系查询节点和关系 数据导出为json文…

分布式锁(Redis分布式锁)

Redis分布式锁原理及应用 前言一、基本原理1.1 什么是分布式锁1.2 分布式锁满足的条件1.3 常见的分布式锁 二、Redis分布式锁的实现核心思路2.1 实现分布式锁时需要实现的两个基本方法2.2 核心思路 三、实现分布式锁版本四、Redis分布式锁误删情况说明4.1 逻辑说明4.2 解决方案…

FreeRTOS(4):软件定时器、中断管理

目录 一、延时函数 延时函数分类 vTaskDelay 与 HAL_Delay 的区别 二、软件定时器 什么是定时器&#xff1f; 软件定时器优缺点 软件定时器原理 软件定时器相关配置 单次定时器和周期定时器 1. 创建软件定时器 2. 开启软件定时器 3. 停止软件定时器 4. 复位软件定时…

【剑指 Offer 27】二叉树的镜像

题目&#xff1a; 请完成一个函数&#xff0c;输入一个二叉树&#xff0c;该函数输出它的镜像。 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1] 输入输出样例 思考1&#xff1a; 二叉树的镜像&#xff0c;就是交换二叉树的每个节点的左右结点 所…

应用在多媒体手机中的低功率立体声编解码器

多媒体手机一般是指可以录制或播放视频的手机。多媒体的定义是多种媒体的综合&#xff0c;一般是图像、文字、声音等多种结合&#xff0c;所以多媒体手机是可以处理和使用图像文字声音相结合的移动设备。目前流行的多媒体概念&#xff0c;主要是指文字、图形、图像、声音等多种…

【数据结构】图文并茂,通过逻辑图带你轻松拿捏链表,实现各种接口功能(2)

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;我们接着之前讲过的顺序表来继续介绍初阶数据结构的内容&#xff0c;今天给大家带来的是有关链表的基本知识和各种接口功能的实现的第二部分。 好了&#xff0c;废话不…

Gitignore忽略文件

默认情况下&#xff0c;Git会监视我们项目中的所有内容&#xff0c;但是有些内容比如mode_modules中的内容&#xff0c;我们不希望他被Git所管理。 我们可以在我们项目目录中添加一个 .gitignore 文件来设置那些需要git忽略的文件。

Burpxss自动化测试工具validator配置和使用教程

一、配置教程 下载Phantomjs&#xff1a; http://phantomjs.org/download.html 下载xss.js https://github.com/nVisium/xssValidator 将xss.js和phantomjs.exe放在一起 利用phantomjs运行xss.js C:\xss>phantomjs.exe xss.js Bapp store里搜索xss validator,然后安装它 安…

基于jeecg-boot的flowable流程提供一种动态设置发起人部门负责人的方式

更多功能看演示系统 gitee源代码地址 后端代码&#xff1a; https://gitee.com/nbacheng/nbcio-boot 前端代码&#xff1a;https://gitee.com/nbacheng/nbcio-vue.git 在线演示&#xff08;包括H5&#xff09; &#xff1a; http://122.227.135.243:9888 这里给大家提供一种…

node.js系列-常见问题处理方案(持续更新)

问题1&#xff1a;nodejs 如何使用 atob、btoa 解决方案&#xff08;base64与uint8array转换&#xff09;&#xff0c;btoa和atob在nodejs中应该怎么写&#xff1f; 浏览器中我们可以这样使用&#xff1a; btoa(123456) MTIzNDU2 atob(MTIzNDU2) 123456node.js中实现方案 con…

国内GitHub加速访问工具-Fetch GitHub Hosts

一、工具介绍 Fetch GitHub Hosts是一款开源跨平台的国内GitHub加速访问工具&#xff0c;主要为解决研究及学习人员访问 Github 过慢或其他问题而提供的 Github Hosts 同步工具。 项目原理&#xff1a;是通过部署此项目本身的服务器来获取 github.com 的 hosts&#xff0c;而…

LeetCode //C - 289. Game of Life

289. Game of Life According to Wikipedia’s article: “The Game of Life, also known simply as Life, is a cellular automaton devised by the British mathematician John Horton Conway in 1970.” The board is made up of an m x n grid of cells, where each cell…

【雕爷学编程】MicroPython动手做(33)——物联网之天气预报

天气&#xff08;自然现象&#xff09; 是指某一个地区距离地表较近的大气层在短时间内的具体状态。而天气现象则是指发生在大气中的各种自然现象&#xff0c;即某瞬时内大气中各种气象要素&#xff08;如气温、气压、湿度、风、云、雾、雨、闪、雪、霜、雷、雹、霾等&#xff…

Prometheus + Grafana安装

Prometheus是一款基于时序数据库的开源监控告警系统&#xff0c;非常适合Kubernetes集群的监控。Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态&#xff0c;任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做…

Gogs Git windos服务搭建指南

Gogs Git服务器搭建指南 背景&#xff1a; 近期在Linux 麒麟 v10 系统上开发&#xff1b;为了团队协同编程&#xff1b;选用了Git服务器&#xff1b;之前在windos开始时候使用的visualSVN server; visualSVN server从4.x.x.x开始收费&#xff1b;限制15个开发者用户&#xff…

带头循环双向链表详解

目录 一、什么是带头循环双向链表&#xff1f; 1.特点&#xff1a; 2.优点&#xff1a; 二、实现接口 1.前置准备 1.1需要的三个文件 1.2结构体的创建和头文件的引用 2.接口实现 2.1函数创建新节点 2.2打印链表内容 2.3尾插新节点 2.4头插新节点 2.5头删节点 2.6尾删…

Vue3_04_ref 函数和 reactive 函数

ref 函数 声明变量时&#xff0c;赋值的值要写在 ref() 函数中修改变量时&#xff0c;变量名.value xxx在模板中使用时可以省略掉 .value&#xff0c;直接使用变量名即可 <template><h1>一个人的信息</h1><h2>姓名&#xff1a;{{name}}</h2><…

pjsip、pjsua2+bcg729 windows下编译java版本

文章目录 简要说明流程步骤 简要说明 基本参考的这里 https://docs.pjsip.org/en/latest/get-started/windows/build_instructions.html#building-the-projects 我这里主要是为了生成pjsua2.dll 用于在java下调用。 其中 libbcg729.dll 是通过vcpkg来进行安装。 pjsip使用vs2…