`

动态刷新实现图片验证码

阅读更多
java实现图片验证码
ImageGenerator 生成一张包含四位随机数的图片 
Java代码 
package com.my.page;   
  
import java.awt.Color;   
import java.awt.Font;   
import java.awt.Graphics;   
import java.awt.image.BufferedImage;   
import java.io.OutputStream;   
import java.util.Random;   
  
import javax.imageio.ImageIO;   
import javax.servlet.http.HttpServlet;   
import javax.servlet.http.HttpServletRequest;   
import javax.servlet.http.HttpServletResponse;   
  
/**  
 * 这个class主要实现随机生成一个4位数的验证码,并写入session,  
 */  
  
public class ImageGenerator extends HttpServlet {   
       
      private static Color getRandColor(int fc, int bc) {   
        Random random = new Random();   
        if (fc > 255)   
            fc = 255;   
        if (bc > 255)   
            bc = 255;   
        int r = fc + random.nextInt(bc - fc);   
        int g = fc + random.nextInt(bc - fc);   
        int b = fc + random.nextInt(bc - fc);   
        return new Color(r, g, b);   
    }   
  
      private static String charsLong = "23456789abcdefghjklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ";   
  
      private static String charsShort = "0123456789";   
  
      private static String chars = charsLong;   
  
      @Override  
    public void doGet(HttpServletRequest request, HttpServletResponse response) {   
        try {   
            int charsLength = chars.length();   
  
            response.setHeader("Pragma", "No-cache");   
            response.setHeader("Cache-Control", "no-cache");   
            response.setDateHeader("Expires", 0);   
  
            int width = 75, height = 20;   
            BufferedImage image = new BufferedImage(width, height,   
                    BufferedImage.TYPE_INT_RGB);   
  
            Graphics g = image.getGraphics();   
  
            Random random = new Random();   
  
            g.setColor(getRandColor(200, 250));   
            g.fillRect(0, 0, width, height);   
  
            g.setFont(new Font("Times New Roman", Font.ITALIC, height));   
  
            g.setColor(getRandColor(160, 200));   
            for (int i = 0; i < 35; i++) {   
                int x = random.nextInt(width);   
                int y = random.nextInt(height);   
                int xl = random.nextInt(12);   
                int yl = random.nextInt(12);   
                g.drawLine(x, y, x + xl, y + yl);   
            }   
  
            StringBuilder sRand = new StringBuilder();   
            String[] fontNames = { "Times New Roman", "Arial", "Book antiqua",   
                    "" };   
  
          for (int i = 0; i < 4; i++) {   
                g.setFont(new Font(fontNames[random.nextInt(3)], Font.ITALIC,   
                        height));   
                char rand = chars.charAt(random.nextInt(charsLength));   
                sRand.append(rand);   
  
                g.setColor(new Color(20 + random.nextInt(110), 20 + random   
                        .nextInt(110), 20 + random.nextInt(110)));   
                g.drawString(String.valueOf(rand), 16 * i + random.nextInt(6)   
                        + 3, height - random.nextInt(4));   
            }   
  
          g.setColor(getRandColor(160, 200));   
          for (int i = 0; i < 19; i++) {   
                int x = random.nextInt(width);   
                int y = random.nextInt(height);   
                int xl = random.nextInt(width);   
                int yl = random.nextInt(width);   
                g.drawLine(x, y, x + xl, y + yl);   
            }   
  
          request.getSession().setAttribute("Login_Image_Code",   
                    sRand.toString());   
  
          g.dispose();   
  
          try {   
                Thread.sleep(100);   
            } catch (Exception ex) {   
            }   
            OutputStream os = response.getOutputStream();   
            ImageIO.write(image, "JPEG", os);   
            os.flush();   
            os.close();   
        } catch (Exception ex) {   
  
        }   
    }   
  
}  

package com.my.page;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.OutputStream;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 这个class主要实现随机生成一个4位数的验证码,并写入session,
 */

public class ImageGenerator extends HttpServlet {
 
   private static Color getRandColor(int fc, int bc) {
  Random random = new Random();
  if (fc > 255)
   fc = 255;
  if (bc > 255)
   bc = 255;
  int r = fc + random.nextInt(bc - fc);
  int g = fc + random.nextInt(bc - fc);
  int b = fc + random.nextInt(bc - fc);
  return new Color(r, g, b);
 }

   private static String charsLong = "23456789abcdefghjklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ";

   private static String charsShort = "0123456789";

   private static String chars = charsLong;

   @Override
 public void doGet(HttpServletRequest request, HttpServletResponse response) {
  try {
   int charsLength = chars.length();

   response.setHeader("Pragma", "No-cache");
   response.setHeader("Cache-Control", "no-cache");
   response.setDateHeader("Expires", 0);

   int width = 75, height = 20;
   BufferedImage image = new BufferedImage(width, height,
     BufferedImage.TYPE_INT_RGB);

   Graphics g = image.getGraphics();

   Random random = new Random();

   g.setColor(getRandColor(200, 250));
   g.fillRect(0, 0, width, height);

   g.setFont(new Font("Times New Roman", Font.ITALIC, height));

   g.setColor(getRandColor(160, 200));
   for (int i = 0; i < 35; i++) {
    int x = random.nextInt(width);
    int y = random.nextInt(height);
    int xl = random.nextInt(12);
    int yl = random.nextInt(12);
    g.drawLine(x, y, x + xl, y + yl);
   }

   StringBuilder sRand = new StringBuilder();
   String[] fontNames = { "Times New Roman", "Arial", "Book antiqua",
     "" };

       for (int i = 0; i < 4; i++) {
    g.setFont(new Font(fontNames[random.nextInt(3)], Font.ITALIC,
      height));
    char rand = chars.charAt(random.nextInt(charsLength));
    sRand.append(rand);

    g.setColor(new Color(20 + random.nextInt(110), 20 + random
      .nextInt(110), 20 + random.nextInt(110)));
    g.drawString(String.valueOf(rand), 16 * i + random.nextInt(6)
      + 3, height - random.nextInt(4));
   }

       g.setColor(getRandColor(160, 200));
       for (int i = 0; i < 19; i++) {
    int x = random.nextInt(width);
    int y = random.nextInt(height);
    int xl = random.nextInt(width);
    int yl = random.nextInt(width);
    g.drawLine(x, y, x + xl, y + yl);
   }

       request.getSession().setAttribute("Login_Image_Code",
     sRand.toString());

       g.dispose();

       try {
    Thread.sleep(100);
   } catch (Exception ex) {
   }
   OutputStream os = response.getOutputStream();
   ImageIO.write(image, "JPEG", os);
   os.flush();
   os.close();
  } catch (Exception ex) {

     }
 }

}


在web.xml加入一下内容 
Java代码 
<servlet>   
    <servlet-name>imageGenerator</servlet-name>   
<servlet-class>com.my.page.ImageGenerator</servlet-class>   
 </servlet>   
  <servlet-mapping>   
    <servlet-name>imageGenerator</servlet-name>   
    <url-pattern>/image.jpg</url-pattern>   
 </servlet-mapping>  

 <servlet>
   <servlet-name>imageGenerator</servlet-name>
 <servlet-class>com.my.page.ImageGenerator</servlet-class>
  </servlet>
   <servlet-mapping>
   <servlet-name>imageGenerator</servlet-name>
   <url-pattern>/image.jpg</url-pattern>
  </servlet-mapping>


运用 
Java代码 
<input type="text" class="txt" wicket:id="validate"/><br/>   
<img src="image.jpg" onclick= "this.src= 'image.jpg? '+(new   Date()) "/>  
其中onclick事件作用是:单击该验证图片,进行刷新,实现看不清换一张的效果 

 

分享到:
评论

相关推荐

    asp页面无刷新生成图片验证码

    在ASP.NET中,无刷新生成图片验证码是一项常用的技术,它用于增强网站...以上就是ASP.NET中无刷新生成图片验证码的主要步骤和技术要点。通过理解并实践这些知识点,开发者可以创建出既安全又用户体验良好的验证码系统。

    Jsp-图片验证码及刷新

    总的来说,Java的`java.awt`包提供了丰富的功能来创建和绘制图片,这使得我们可以方便地实现图片验证码的生成和刷新。结合HTTP协议和服务器端编程,我们可以构建出高效且安全的图片验证码系统,为网站提供有效的防护...

    SSM实现登录验证码功能

    - 为了提升用户体验,可以添加刷新验证码的按钮,点击后更新图片及Session中的验证码。 - 考虑使用AJAX异步验证,用户输入验证码后立即给出反馈,而不需要等待整个表单提交。 6. **安全考虑**: - 验证码应有...

    Android开发图片验证码的实现

    本教程将详细讲解如何在Android项目中实现图片验证码的功能。 首先,理解图片验证码的基本原理。验证码通常由一串随机字符组成,这些字符被扭曲、旋转、加噪,以增加机器识别的难度。用户需要正确输入显示的字符...

    js无刷新图片验证码

    实现无刷新图片改变if (String.Compare(Request.Cookies["yzmcode"].Value,txtcode.Text.Trim(), true) != 0) try { //生成随机生成器 Random random = new Random(); //清空图片背景色 g.Clear(Color.White);...

    asp.net ajax实现无刷新验证码

    ### ASP.NET AJAX 实现无刷新验证码的详细解析 在现代Web开发中,验证码(CAPTCHA)作为用户身份验证的一种手段,被广泛应用于登录界面、表单提交等场景中,用以区分人类用户与自动化程序。传统的验证码加载方式...

    ashx生成验证码实现无刷新页面更换验证码

    使用JavaScript的`XMLHttpRequest`对象或者jQuery的`$.ajax`方法,可以向服务器发送异步请求,获取新的验证码图片URL,然后动态更新页面上的验证码图片源,而无需整个页面重新加载。 5. **session管理**:为了验证...

    验证码的实现方法-局部刷新

    服务器返回新图像的二进制数据,前端接收到后更新img标签的src属性,实现图片的无刷新更换。 5. **验证过程**:用户输入验证码后,前端将输入值与服务器保存的验证码进行比对。如果匹配,则发送用户请求的操作数据...

    验证码动态实现验证码刷新

    本篇文章将深入探讨如何在IT领域中通过读取文件流来动态实现验证码的生成。 首先,验证码的生成通常涉及以下几个步骤: 1. **随机生成数字或字母**:验证码的内容通常由随机的数字和/或字母组成。我们可以使用编程...

    asp.net图片验证码,单击无刷新更换图片

    总之,ASP.NET中的图片验证码通过结合服务器端的验证码生成逻辑和客户端的无刷新交互,提供了一种有效且用户体验良好的安全验证方式。通过理解和实现这样的验证码,开发者可以增强网站的安全性,同时提高用户在填写...

    随机验证码(可刷新)

    本项目名为“随机验证码(可刷新)”,它使用Java编程语言结合Servlet技术来实现一个动态生成并可刷新的验证码功能。这个功能尤其适用于Web应用,确保每次用户请求时都能得到一个新的、独一无二的验证码。 首先,...

    vue+springboot+redis+kaptcha实现登录验证码

    3. 前端Vue组件:创建一个Vue组件,用于显示验证码图片,并提供刷新验证码和提交验证码的功能。使用axios向后端发送请求,获取和验证验证码。 4. Redis配置:确保Redis服务运行正常,并在Spring Boot中配置Redis...

    Zend_captcha_image点击刷新图片验证码(dojo_ajax)

    【描述】 简单的验证码图片点击后实现图片刷新意味着当用户点击验证码图片时,无需页面整体刷新,图片会动态更新。这样做可以提高用户体验,因为用户不需要等待整个页面重新加载只是为了获取一个新的验证码。而...

    RichFaces中的ajax组件实现刷新验证码

    在探讨“RichFaces中的ajax组件实现刷新验证码”的技术细节时,我们首先需要理解RichFaces框架以及AJAX在其中的应用。RichFaces是一个基于JavaServer Faces(JSF)的开源UI组件库,它提供了丰富的用户界面组件,包括...

    点击图片刷新验证码插件 for PHP168.rar

    通过此插件,用户只需点击验证码图片即可实现验证码的刷新,而无需重新加载整个页面,从而保持了表单数据的完整性。 描述部分提到了在表单验证过程中遇到的不便,即当用户需要验证其输入时,通常需要刷新页面以获取...

    JavaScript实现页面动态验证码

    在本主题中,我们将深入探讨如何使用JavaScript实现一个页面动态验证码。验证码的主要目的是防止自动化的机器人程序对网站进行恶意操作,例如批量注册、垃圾评论等。 验证码通常包括一些随机生成的字符或数字,用户...

    html5点击刷新验证码特效

    然而,随着技术的发展,验证码的形式也变得越来越多样化,其中包括图片验证码、滑动验证码、点击验证码等。 在HTML5中,我们可以利用Canvas元素来生成和展示验证码。Canvas是HTML5的一个重要特性,它允许开发者在...

    jsp验证码刷新功能

    而在JSP技术中实现验证码的刷新功能,不仅可以提升用户体验,还能进一步增强系统的安全性。 #### 一、验证码的基本原理 验证码的主要目的是区分操作是由人类还是由计算机程序完成的。常见的验证码类型包括文本型...

    js验证码验证码插件,简单易用、图片验证码,附demo

    图片验证码相比其他类型(如音频验证码、滑动验证码)具有直观、易于理解和实现的优点。它们可以有效地阻止大部分自动脚本,同时对正常用户干扰较小。 3. **简单易用的js验证码插件** 描述中的“js验证码插件”指...

    asp.net验证码源码 并验证登录 不刷新页面刷新验证码

    这通常通过Ajax技术实现,如使用jQuery库发送异步请求到服务器,服务器返回新的验证码图像,然后JavaScript更新页面上的验证码图片。 验证过程发生在用户点击登录按钮后,服务器端代码会检查输入的验证码是否与之前...

Global site tag (gtag.js) - Google Analytics