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

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

Java 额外说明

收录于:93天前

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、测试结果:

得到的图片如下:

图形验证码验证:

 

. . .

相关推荐

额外说明

Docker容器启动失败:找不到映像

Docker容器启动失败:找不到映像 Docker容器启动失败:找不到映像 摘要 - 引言 - 正文 - 为什么会找不到映像? - 1. 映像不存在 2. 映像标签错误 3. 映像不兼容 如何预防和解决问题? - 1. 定期清理无用映像 2. 使用确切的

额外说明

【JAVA-Day14】深入了解 Java 中的 while 循环语句

深入了解 Java 中的 while 循环语句 深入了解 Java 中的 while 循环语句 摘要 引言 一、什么是 while 循环语句 二、while 循环语句的语法和使用场景 使用场景 三、while 循环的优势和使用场景 优势 使用建议 四、总

额外说明

【java】分解质因数

题目: 将一个正整数分解质因数。例如:输入90,打印出90 = 2 * 3 * 3 * 5. Code: package test; import java.util.Scanner; public class test { public sta

额外说明

【Unity3D日常开发】Unity3D中打包WEBGL后读取本地文件数据

推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 有粉丝问我,怎么在打包后

额外说明

解决华为手机破解巧影软件无法使用

原文地址:https://blog.csdn.net/dx147305114/article/details/87863052 本次解决的是部分巧影破解软件的问题,在网上看了很多都是关于华为手机无法使用破解巧影的问题,整理了一下解决方案,供大家参考。 1

额外说明

Elasticsearch快速入门及结合Next.js案例使用

文章目录 什么是Elasticsearch 安装Elasticsearch 索引 文档 节点 分片 使用Elasticsearch进行全文搜索 连接到Elasticsearch 创建索引和插入数据 创建全文搜索页面 测试全文搜索 结语 -欢迎来到Java

额外说明

C语言-------函数栈帧的创建和销毁------剖析描骨

作者前言 -        ✨✨✨✨✨✨--------    -      作者介绍:                              --        - -------              -           -作者id:老秦

额外说明

JSP自定义标签

一,JSP自定义标签 1.1是什么?    是一种在JSP页面中定义的扩展标签,它由开发人员自行编写,以便将某些功能封装在标签中,并在JSP页面中如同普通标签一样使用。JSP容器在解析JSP页面时,遇到自定义标签会把它转换成相应的Java代码,并最终生成

额外说明

【Java 基础篇】Java Consumer 接口详解

在Java编程中,有时需要对某个对象进行操作或者处理,而这个操作可能是非常灵活的。Java 8引入了函数式编程的特性,其中的一个重要接口就是Consumer接口。本文将详细介绍Consumer接口,包括它的定义、用法以及示例。 什么是 Consumer

额外说明

【第10篇】MobileNets:用于移动视觉应用的高效卷积神经网络

MobileNets:用于移动视觉应用的高效卷积神经网络 文章目录 MobileNets:用于移动视觉应用的高效卷积神经网络 摘要 一、简介 二、前期工作 三、MobileNet 架构 3.1、深度可分离卷积 3.2、网络结构和训练 3.3、宽度乘数:更

ads via 小工具