小工具      在线工具  汉语词典  dos游戏  css  js  c++  java

Java 图形验证码的生成和验证

Java 额外说明

收录于:52天前

1.导入第三方包,主要用于生成图形验证码

       <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>4.6.8</version>
        </dependency>

2.获取生成的图形验证码图像流并验证图像验证码

package com.JXWorkApi.controller;

import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.ShearCaptcha;
import com.JXWork.result.Result;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;


/**
 * 图形验证码生成
 *
 * 使用HuTool的captcha在内存中生成的验证码图片,并将绘制在图片上的验证码存放到session中用于后续验证
   最后通过OutputStream将生成的图片进行输出
   将页面提交的验证码和存放在session中的验证码对比来进行校验
 *
 * @author TF12778 2019/10/6 15:46
 */
@Controller
@RequestMapping(value = "/captcha")
public class HuToolController {

    private static Log logger = LogFactory.getLog(HuToolController.class);
    /**
     * 获取图形验证码
     * http://localhost:9999/JXWorkApi/captcha/getShearCaptcha
     * @param request
     * @param response
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/getShearCaptcha", method = RequestMethod.GET)
    public Result<String> getShearCaptcha(HttpServletRequest request, HttpServletResponse response) {

        OutputStream out = null;
        try {
            out = response.getOutputStream();// 取得输出流
            //定义图形验证码的长、宽、验证码字符数、干扰线宽度
            ShearCaptcha captcha = CaptchaUtil.createShearCaptcha(200, 100, 4, 4);
            //ShearCaptcha captcha = new ShearCaptcha(200, 100, 4, 4);
            //图形验证码写出,可以写出到文件,也可以写出到流
//            captcha.write("/Users/sunww/Desktop/shear.png");
            captcha.write(out);
            //验证图形验证码的有效性,返回boolean值
            boolean checkPass = captcha.verify(captcha.getCode());
            logger.info(checkPass);
            // 将生成的验证码code放入sessoin中
            request.getSession().setAttribute("code", captcha.getCode());
            out.flush();  // 将缓存中的数据立即强制刷新, 将缓冲区的数据输出到客户端浏览器
            out.close(); // 关闭输出流

            return null;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        return  new Result<String>("error", "图片获取失败", "", null, "500" );
    }

    /**
     * 验证图形码(这一步其实可以放到登录拦截器中去做)
     * http://localhost:9999/JXWorkApi/captcha/verifyCode?code=e2xr
     * @param inCode 前端输入的图形验证码code
     * @param req
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/verifyCode", method = RequestMethod.GET)
    public Result<String> verifyCode(String inCode, HttpServletRequest req) {

        // 获取存放在session中的验证码
        String code = (String) req.getSession().getAttribute("code");
        // 获取页面提交的验证码
//        String inputCode = req.getParameter("code");
        String inputCode = inCode;
        if(code.toLowerCase().equals(inputCode.toLowerCase())) { // 验证码不区分大小写
            return  new Result<String>("success", "验证成功", "", null, "200" );
        }
        return  new Result<String>("error", "验证失败", "", null, "500" );
    }
}

3、测试结果:

得到的图片如下:

图形验证码验证:

 

. . .

相关推荐

额外说明

SpringBoot集成Quartz集群模式

<!-- quartz定时任务 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</ar

额外说明

如果您集成easyexcel来增强excel表格

如果默认的excel注解已经满足不了你的需求,可以使用excel的增强解决方案easyexcel,它是阿里巴巴开源的一个excel处理框架,使用简单、功能特性多、以节省内存著称。 官网地址:关于Easyexcel | Easy Excel 目录 1、ru

额外说明

【Python面向对象编程】第十九章 只读属性

本文我们介绍如何定义 Python 只读属性,以及使用只读属性定义计算属性。 只读属性简介 定义只读属性的方法就是创建只有 getter 方法的属性。不过,这种方法定义的不是真正意义上的只读属性,因为我们总是可以访问和修改底层的属性。 只读属性通常用于某

额外说明

几种常用的抓包工具,你一定用过

常用的几款抓包工具,你确定用过 Flidder Httpwatch 其他浏览器的内置抓包工具 1. Hping 2. Ostinato 3. Scapy 4. Libcrafter 5. Yersinia 6. packETH 7. Colasoft P

额外说明

【Golang】✔️走进 Go 语言✔️ 第十三课 range & map

【Golang】✔️走进 Go 语言✔️ 第十三课 range & map 概述 Range 例 1 例 2 map 例 1 例 2 例 3 概述 Golang 是一个跨平台的新生编程语言. 今天小白就带大家一起携手走进 Golang 的世界. (第 1

额外说明

Linux命令200例:cat命令的妙用和实战技巧

-作者简介,黑夜开发者,全栈领域新星创作者✌,2023年6月csdn上海赛道top4。 -本文已收录于专栏:Linux命令大全。 -本专栏我们会通过具体的系统的命令讲解加上鲜活的实操案例对各个命令进行深入讲解。欢迎提前锁定关注。 文章目录 -一. 概述

额外说明

Python数据分析学习笔记04:Pandas基础

文章目录 一、数据结构:Series和DataFrame 1、Series(序列——一维序列结构) 2、DataFrame(数据帧——二维表结构)

额外说明

罗振宇2021跨年演讲1:长大以后有多少责任和烦恼?

长大以后有多少责任和烦恼? 有一件事,在我心里憋了半年,跟谁都没说。因为我一定要把它带到2020年12月31号的这个晚上,在这里,讲给武汉人听。 你看,这里有一堆糖果,但这不是一堆普通的糖果。过去的很多年里,这堆糖果曾经出现在世界各地的很多著名展览馆里。

额外说明

Windows【工具 01】视频下载工具BBDown.exe详细使用说明(https://github.com/nilaoda/BBDown)mp4格式无法识别问题处理

1.工具说明 一款命令行式B站下载器,软件混流时需要外部程序:普通视频(ffmpeg 或 mp4box),杜比视界(ffmpeg5.0 以上或新版 mp4box)。 下载器下载地址《Bilibili Downloader》 混流工具下载地址《ffmpeg

额外说明

打开游戏提示找不到nvToolsExt64_1.dll文件的解决办法

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个nvToolsExt64_1

ads via 小工具