广告
返回顶部
首页 > 资讯 > 后端开发 > Python >java实现图片验证码
  • 595
分享到

java实现图片验证码

2024-04-02 19:04:59 595人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

本文实例为大家分享了java实现图片验证码的具体代码,供大家参考,具体内容如下 目的: 1) 验证操作者是否是人 2) 防止表单重复提交 生成验证码的要点: 1) 使用java代码生

本文实例为大家分享了java实现图片验证码的具体代码,供大家参考,具体内容如下

目的:

1) 验证操作者是否是人

2) 防止表单重复提交

生成验证码的要点:

1) 使用java代码生成图片对象

BufferedImage

2) 使用Random生成随机字符串

3) 将图片对象用

Imageio.write(图片对象, "jpeg|png", 响应字节输出流)
返回给客户端浏览器

验证验证码:

要点:

1) 将验证码文字存入session作用域

2) 表单提交时,对比session中的验证码和表单中的验证码

CaptchaUtils.java

package cn.seeker.utils;
 
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.*;
import java.util.List;
 
public class CaptchaUtil {
 
    public static String [] fuhao = {"+","-","*","/"};
    public static int num = 0;
 
    //生成随机算式
    public static String random(){
 
        List list = new ArrayList();
        Random ran = new Random();
        int n1 = ran.nextInt(10);
        int n2 = ran.nextInt(10);
        String f = fuhao[ran.nextInt(fuhao.length)];
        StringBuilder sb = new StringBuilder(4);
 
        switch (f){
            case "+":
                num = n1+n2;
                break;
            case "-":
                num =n1-n2;
                break;
            case "*":
                num = n1*n2;
                break;
            case "/":
                if(n2 == 0){
                    n2 = ran.nextInt(10)+1;
                    num = n1/n2;
                }else{
                    num = n1/n2;
                }
                break;
        }
        sb.append(n1);
        sb.append(f);
        sb.append(n2);
        sb.append("=");
 
        return sb.toString();
    }
    public static void outputImage(String str, OutputStream os){
        Random ran = new Random();
        //创建图片对象
        BufferedImage img = new BufferedImage(100,40, BufferedImage.TYPE_INT_RGB);
        //获取画布
        Graphics g = img.getGraphics();
        //设置背景
        g.setColor(Color.white);
        g.fillRect(0,0,100,40);
        //写字
        g.setColor(Color.black);
        g.setFont(new Font("微软雅黑",Font.PLaiN,30));
        g.drawString(str,10,40);
        //随机三条线
        g.drawLine(ran.nextInt(100),ran.nextInt(40),
                ran.nextInt(100),ran.nextInt(40));
        g.drawLine(ran.nextInt(100),ran.nextInt(40),
                ran.nextInt(100),ran.nextInt(40));
        g.drawLine(ran.nextInt(100),ran.nextInt(40),
                ran.nextInt(100),ran.nextInt(40));
        // 4. 输出结果
        // 常见的压缩格式:jpeg(有损压缩), png(无损压缩) ...
        try {
            ImageIO.write(img, "png", os);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
 
}

reGISt.jsp

<%--
  Created by IntelliJ idea.
  User: Administrator
  Date: 2018/10/14
  Time: 15:43
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>注册</title>
    <style>
      
        img { cursor: pointer}
    </style>
</head>
<body>
<fORM action="/regist" method="post">
    <img src="/captcha.png" onclick="changeImg(this)">
    输入验证码:<input type="text" name="cap">
    <input type="submit" value="提交">
</form>
 
<script>
 
    function changeImg(img) {
        // 浏览器有一个缓存特性,
        // 第一次从服务器获取图片,浏览器第二次发送请求时发现地址没有改变,就会使用第一次的图片,而不会真正发送请求
        // 为了让浏览器每次都把请求发送给服务器,给一个时间参数
        img.src = "/captcha.png?t="+new Date().getTime(); // 给src赋一个新值,就会向新值的地址发送一次请求
    }
</script>
</body>
</html>

CaptchaServlet.java

package cn.seeker.controller;
 
import cn.seeker.utils.CaptchaUtil;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WEBServlet;
import javax.servlet.Http.httpservlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
 
@WebServlet(urlPatterns = "/captcha.png")
public class CaptchaServlet extends HttpServlet {
 
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 
        response.setContentType("image/png");
        //获取随机字符串
        String random = CaptchaUtil.random();
        //输出图片
        CaptchaUtil.outputImage(random,response.getOutputStream());
        //存入结果
        request.getSession().setAttribute("res",CaptchaUtil.num);
 
    }
 
 
}

registServlet.jsp

package cn.seeker.controller;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
 
@WebServlet(urlPatterns = "/regist")
public class registServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String cap = req.getParameter("cap");
        Integer res = (Integer)req.getSession().getAttribute("res");
        if(Integer.parseInt(cap) == res) {
            // 填写正确,注册成功
            req.getSession().removeAttribute("res");
            System.out.println("注册成功");
            resp.sendRedirect("/index.jsp");
 
        } else {
            req.setAttribute("error", "验证码不正确");
            req.getRequestDispatcher("/jsp/regist.jsp").forward(req,resp);
        }
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: java实现图片验证码

本文链接: https://www.lsjlt.com/news/146817.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java实现图片验证码
    本文实例为大家分享了java实现图片验证码的具体代码,供大家参考,具体内容如下 目的: 1) 验证操作者是否是人 2) 防止表单重复提交 生成验证码的要点: 1) 使用java代码生...
    99+
    2022-11-13
  • java实现动态图片验证码
    目的:防止恶意表单注册生成验证码图片定义宽高int width = 100; int height = 50;使用BufferedImage在内存中生成图片BufferedImage image = new BufferedImage(wi...
    99+
    2019-04-24
    java入门 java 动态 图片验证码
  • Java实现图片验证码功能
    简介 在实现登录功能时,一般为了安全都会设置验证码登录,为了防止某个用户用特定的程序暴力破解方式进行不断的尝试登录。常见验证码分为图片验证码和短信验证码,还有滑动窗口模块和选中指定物...
    99+
    2022-11-13
  • java实现随机验证码图片生成
    本文实例为大家分享了java生成随机验证码图片的具体代码,供大家参考,具体内容如下 1.controller @GetMapping(value = "/getRan...
    99+
    2022-11-12
  • Vue实现图片验证码生成
    图片验证码主要用于注册,登录等提交场景中,目的是防止脚本进行批量注册、登录、灌水,相比不带图片验证的安全度有所提高,不过目前也有自动识别图片验证码的程序出现,基本都是付费识别,随之又...
    99+
    2022-11-13
  • php怎么实现图片验证码
    本文操作环境:Windows7系统、PHP7.1版,DELL G3电脑。php怎么实现图片验证码?PHP实现图片验证码功能验证码: captcha, 是一种用于区别人和电脑的技术原理(Completely Automated Public ...
    99+
    2017-09-20
    php
  • JS实现图片验证码功能
    本文实例为大家分享了JS实现图片验证码功能的具体代码,供大家参考,具体内容如下 以下代码可以直接copy运行,不需要引入jquery.jar 1. html代码 <%@ pag...
    99+
    2022-11-13
  • java怎么实现随机验证码图片生成
    这篇文章主要介绍“java怎么实现随机验证码图片生成”,在日常操作中,相信很多人在java怎么实现随机验证码图片生成问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java怎么实现随机验证码图片生成”的疑惑有所...
    99+
    2023-06-25
  • Java 图片验证码需求分析
    💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 图片验证码 需求分析 连续因输错密码...
    99+
    2023-10-18
    java 开发语言
  • JAVA中如何验证图片验证码是否正确
    知识补充:toString() 方法用于返回以一个字符串表示的 Number 对象值。equalsIgnoreCase() 方法用于将字符串与指定的对象比较,不考虑大小写。验证方法:首先需要先获取用户输入的验证码对象,然后先判断验证码是否为...
    99+
    2016-02-24
    java 验证 图片验证码
  • javaWeb怎么实现随机图片验证码
    这篇文章给大家分享的是有关javaWeb怎么实现随机图片验证码的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。实现步骤Java后台生成一张随机数字/字母/汉字验证码的图片。存入redis或者session。用户输入...
    99+
    2023-06-14
  • Vue如何实现图片验证码生成
    这篇文章主要介绍“Vue如何实现图片验证码生成”,在日常操作中,相信很多人在Vue如何实现图片验证码生成问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue如何实现图片验证码生成”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-29
  • JS如何实现图片验证码功能
    本篇内容主要讲解“JS如何实现图片验证码功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS如何实现图片验证码功能”吧!1. html代码<%@ page langu...
    99+
    2023-06-30
  • vue实现登录时的图片验证码
    本文实例为大家分享了vue实现登录时的图片验证码的具体代码,供大家参考,具体内容如下 效果图 一、新建vue组件components/identify/identify.vue ...
    99+
    2022-11-12
  • jsp实现简单图片验证码功能
    本文实例为大家分享了jsp实现简单图片验证码的具体代码,供大家参考,具体内容如下 一、实现的功能分析 (1)在登陆页面加验证码的功能,起到一定的安全性。在输入正确的验证码,用户名和密...
    99+
    2022-11-13
  • Python+Selenium+Pytesseract实现图片验证码识别
    目录一、selenium截取验证码二、安装识别环境pytesseract+Tesseract-OCR验证识别环境是否正常三、处理验证码图片图片处理识别一、selenium截取验证码 ...
    99+
    2022-11-12
  • Java使用Servlet生成验证码图片
    本文实例为大家分享了Java使用Servlet生成验证码图片的具体代码,供大家参考,具体内容如下 一、实现思路 1、使用BufferedImage用于在内存中存储生成的验证码图片 2...
    99+
    2022-11-12
  • Java实现滑块拼图验证码
    本文实例为大家分享了Java实现滑块拼图验证码的具体代码,供大家参考,具体内容如下 1、后端随机生成抠图和带有抠图阴影的背景图片,后台保存随机抠图位置坐标 2、前端实现滑动交互,将抠...
    99+
    2022-11-12
  • PythonFlask实现图片验证码与邮箱验证码流程详细讲解
    目录1. 图片验证码1.1 工具类-utility.py1.2 控制层-user.py2. 邮箱验证码2.1 准备2.2 工具类-utility.py2.3 控制层-user.py1...
    99+
    2022-11-11
  • SpringBoot整合kaptcha实现图片验证码功能
    目录栗子配置文件SpringBoot项目中pom.xml文件项目代码项目结构SpringBootVerifyCodeApplication.javaVerifyCodeConfig....
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作