`
lhgyy00
  • 浏览: 145312 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

java生成和解析验证码

阅读更多
package cn.sh.ideal.util;

import java.io.IOException;
import java.io.PrintWriter;
import java.awt.*;
import java.io.*;
import java.awt.image.*;
import java.util.*;
import javax.imageio.*;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class AuthImageServlet extends HttpServlet {

/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}

/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession();

// 设置页面不缓存
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);

// 在内存中创建图象
int width=60, height=18;
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.PLAIN,22));


// 画边框
// g.setColor(new Color());
g.drawRect(0,0,width-1,height-1);

// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(getRandColor(160,200));
for (int i=0;i<155;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);
}

// 取随机产生的认证码(4位数字)
String sRand="";
for (int i=0;i<4;i++){
    String rand=String.valueOf(random.nextInt(10));
    sRand+=rand;
    // 将认证码显示到图象中
    g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
// 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
g.drawString(rand,13*i+6,16);
}

// 将认证码存入SESSION
session.setAttribute(cn.sh.ideal.Constants.AUTH_CODE_IN_SESSION_KEY,sRand);

// 图象生效
g.dispose();

// 输出图象到页面
    try{
    response.setContentType("image/jpeg");
    ImageIO.write(image, "JPEG", response.getOutputStream());
//out.clear();
//out = pageContext.pushBody();
    }
    catch(Exception e){
    e.printStackTrace();
    }
}
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);
        }

}
分享到:
评论

相关推荐

    java生成图片验证码

    描述中同样强调了"java生成图片验证码",这意味着我们将专注于Java实现的具体步骤和技术。 标签"java servlet"表明我们将在Servlet环境下进行操作。Servlet是Java EE(现在称为Jakarta EE)的一部分,主要用于开发...

    java验证码(算术型和字符型)和生成和解析代码,yanzhengma.zip

    总的来说,这个教程涵盖了Java环境下使用SpringBoot和Kaptcha库生成和解析验证码的基本步骤,对于提升Web应用的安全性和防止自动化攻击有着积极的作用。通过实践这两个类型的验证码,开发者可以更好地理解验证码的...

    java随机生成数字 验证码

    ### 使用Java生成随机数字和验证码 #### 1. 导入必要包 在文件的部分内容中,可以看到以下导入语句: ```java import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; ...

    java代码生成图片验证码

    ### Java代码生成图片验证码知识点详解 #### 一、概述 在Web应用中,为了防止恶意登录或自动化操作,经常会用到验证码技术。其中,图片验证码(也称图形验证码)是一种常见的形式,它通过生成带有随机字符和干扰...

    java随机动态生成汉字验证码图片的实例代码分享

    在这个实例中,我们关注的是使用Java来生成汉字验证码图片,这是一种有效的防止爬虫和自动化工具的方式。下面将详细介绍这个Java实现汉字验证码的实例。 首先,生成汉字验证码的核心思想是结合随机性和图像处理技术...

    Java生成验证码(包含gif动画验证码)

    Java作为一种广泛使用的编程语言,自然也有丰富的库和方法来生成验证码,包括静态的图片验证码以及动态的GIF动画验证码。本篇文章将详细探讨如何在Java中实现这两种类型的验证码。 首先,让我们从静态图片验证码...

    Java生成图片验证码

    ### Java生成图片验证码知识点解析 #### 一、概述 在Web应用中,图片验证码是一种常见的安全机制,用于区分用户是人还是自动化程序。通过生成图片验证码并在前端展示,可以有效防止恶意登录或表单提交等行为。本文...

    java代码中图形验证码的源代码

    ### Java代码中图形验证码的实现 ...它不仅展示了如何生成随机颜色和绘制验证码图片,还涉及了HTTP响应头的设置以及Session的使用。这对于学习如何在Java Web应用中实现图形验证码功能具有很好的参考价值。

    java web加法验证码实例

    本实例将探讨如何使用简单的Servlet生成加法验证码,并将其整合到Struts2、SSH2(Spring、Struts2、Hibernate)和Mybatis等流行框架中。这个实践教程将帮助开发者了解验证码的基本实现以及与主流框架的集成。 首先...

    用JAVA生成验证码的操作

    ### 使用Java生成验证码的深入解析 #### 知识点概览 在当今互联网时代,验证码作为网站和应用程序安全的重要组成部分,被广泛应用于用户登录、表单提交等场景中,以防止自动化工具的恶意操作。本文将详细介绍如何...

    java验证码的源码

    JavaDoc是Java语言的官方文档生成工具,通过解析源代码中的注释,生成详细的API文档,帮助开发者了解库的类、方法和接口的使用方法。 在实际使用中,Java验证码的实现步骤大致如下: 1. 引入Kaptcha库,例如通过...

    java强大的动态验证码

    本文档将深入解析一个Java项目中的动态验证码实现方法,该方法利用Java后端技术生成验证码图片,并通过JavaScript从前端调用这些功能,以确保系统的安全性与用户体验。 #### 二、关键技术点 ##### 2.1 代码结构与...

    Java 生成任意长度的验证码过程解析

    Java生成任意长度验证码过程解析是指使用Java语言生成一个任意长度的验证码,验证码可以包含大小写英文字母和数字。下面将详细介绍Java生成任意长度验证码的过程解析。 一、需求说明 在实际的项目中,经常需要生成...

    java实现给手机发送验证码

    在IT行业中,尤其是在网络安全和身份验证领域,手机验证码是一种常用的技术手段,用于确保用户的身份真实性。在本场景中,我们将探讨如何使用Java编程语言来实现手机验证码的发送,以及涉及的相关知识点。 首先,...

    JAVA一段生成验证码图片的程序

    总结一下,这个Java程序是用于生成验证码图像的,它使用了颜色随机化、线条干扰和字体随机化等技术来提高验证码的复杂性,防止自动识别。验证码在Web应用中起到了关键的用户身份验证作用,防止了自动化的恶意活动。

    用java实现的验证码生成的具体代码

    总的来说,Java实现验证码生成涉及图像处理、随机数生成和对比验证等多个方面。理解这些概念并结合实际需求,我们可以创建出满足安全性和用户体验的验证码系统。在压缩包中的`image`文件可能包含了生成的验证码图像...

    ValidateCode.jar包下载含用法,Java生成图片验证码

    总之,`ValidateCode.jar`包为Java开发者提供了一个方便的工具,用于快速实现图片验证码功能,而无需从头编写复杂的图像处理和随机生成逻辑。它的灵活性和易用性使得在实际项目中集成验证码变得简单高效。通过适当的...

    行为验证码(滑动拼图、点选文字),前后端(java)交互

    - 源码中可能包含了创建验证码图像、处理用户交互、生成和解析验证数据等功能的具体实现,对于学习和理解验证码的工作原理非常有帮助。 以上就是关于行为验证码(滑动拼图、点选文字)以及前后端(Java)交互的...

    Java生成验证码

    ### Java生成验证码详解 在数字化世界中,验证码作为一种防止自动化工具进行恶意操作的安全措施,扮演着至关重要的角色。本文将深入探讨如何使用Java语言生成图片验证码,包括代码实现、技术要点及其实现流程。 ##...

    java图片滑动验证码

    Java提供了`org.json`库来处理JSON对象的创建和解析。 7. **安全性考虑**:为了防止重放攻击,验证码通常是一次性的,即每次请求新的页面或操作时,都会生成一个新的验证码。此外,服务器端验证成功后,应立即废弃...

Global site tag (gtag.js) - Google Analytics