`
lee123lee123
  • 浏览: 9828 次
社区版块
存档分类
最新评论

servlet产生验证码

阅读更多
package com.mweb.user.servlet;
 
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
 
import javax.imageio.ImageIO;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
/**
 * 生成图形验证码的Servlet
 */
public class ImageCodeMakerServlet extends HttpServlet
{
 
    @Override
    public void init(ServletConfig config) throws ServletException
    {
        // TODO Auto-generated method stub
        super.init(config);
    }
 
    /**
     *
     */
    private static final long serialVersionUID = -8924942016876830055L;
 
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException
    {
        doPost(req, resp);
    }
 
    /**
     * @see javax.servlet.http.HttpServlet#void
     *      (javax.servlet.http.HttpServletRequest,
     *      javax.servlet.http.HttpServletResponse)
     */
    public void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException
    {
 
        // 首先设置页面不缓存
        resp.setHeader("Pragma", "No-cache");
        resp.setHeader("Cache-Control", "no-cache");
        resp.setDateHeader("Expires", 0);
 
        // 定义图片的宽度和高度
        int width = 90, height = 40;
        // 创建一个图像对象
        BufferedImage image = new BufferedImage(width, height,
                BufferedImage.TYPE_INT_RGB);
        // 得到图像的环境对象
        Graphics g = image.createGraphics();
 
        Random random = new Random();
        // 用随机颜色填充图像背景
        g.setColor(getRandColor(180, 250));
        g.fillRect(0, 0, width, height);
        for (int i = 0; i < 5; i++)
        {
            g.setColor(getRandColor(50, 100));
            int x = random.nextInt(width);
            int y = random.nextInt(height);
            g.drawOval(x, y, 4, 4);
        }
        // 设置字体,下面准备画随机数
        g.setFont(new Font("", Font.PLAIN, 40));
        // 随机数字符串
        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(80), 20 + random
                    .nextInt(100), 20 + random.nextInt(90)));
            // 将随机数字画在图像上
            g.drawString(rand, (17 + random.nextInt(3)) * i + 8, 34);
 
            // 生成干扰线
            for (int k = 0; k < 12; k++)
            {
                int x = random.nextInt(width);
                int y = random.nextInt(height);
                int xl = random.nextInt(9);
                int yl = random.nextInt(9);
                g.drawLine(x, y, x + xl, y + yl);
            }
        }
 
        // 将生成的随机数字字符串写入Session
        req.getSession().setAttribute("randcode", sRand);
        // 使图像生效
        g.dispose();
        // 输出图像到页面
        ImageIO.write(image, "JPEG", resp.getOutputStream());
    }
 
    /**
     * 产生一个随机的颜色
     *
     * @param fc
     *            颜色分量最小值
     * @param bc
     *            颜色分量最大值
     * @return
     */
    public 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);
    }
}
分享到:
评论

相关推荐

    jsp/java-ee 产生验证码类代码

    使用jsp/java-ee编程,页面提交后处理的servlet产生页面验证码。表单页面产生验证码。只有servlet文件。

    Jsp+Servlet+验证码[文].pdf

    验证码是指在用户注册、登录、评论等操作时,系统生成的一串随机字符或者图片,以防止机器人恶意攻击和垃圾信息的产生。本文将详细介绍 Java Servlet 验证码生成机制的实现过程。 验证码生成机制 验证码生成机制的...

    servlet验证码

    servlet 验证码用于注册时自动产生验证码

    Java产生验证码实例

    - 使用`javax.servlet.http.HttpSessionBindingListener`接口实现Session监听,当验证码过期或被替换时,自动移除旧的验证码。 - 对于高并发场景,可以考虑使用分布式Session存储,如Redis,以解决单台服务器Session...

    Java后端产生验证码后台验证功能的实现代码

    Java后端产生验证码后台验证功能的实现代码 Java后端产生验证码后台验证功能的实现代码是指在Java后台生成验证码,并对其进行后台验证的功能。本文主要介绍了Java后台产生验证码后台验证功能的实现代码,结合实例...

    jsp页面中产生验证码

    首先,验证码的生成通常涉及到随机字符的产生和图像的绘制。在JSP中,我们可以使用Java的`java.util.Random`类来生成随机数字和字母,然后结合`java.awt`和`javax.imageio`包中的类来创建图像并写入这些随机字符。`...

    生成验证码的项目源码

    生成验证码的源代码。由servlet生成验证码和...能够产生验证码但是如何传输和验证呢,一般是传回服务器在action里做验证。 我还是喜欢js页面产生验证码,因为简单,虽然效果差了点。所以也附带了个js生成验证码的例子。

    非常漂亮的验证码

    - **随机性**:为了防止被破解,验证码通常使用随机算法生成,确保每次请求都产生不同的验证码。 - **图像处理**:生成的验证码字符串需要转换为图像,这可能涉及到字体、颜色、背景、扭曲和噪声的处理,以增加识别...

    jsp验证码生成以及刷新

    jsp 验证码生成和刷新详解 jsp 验证码生成和刷新是 Web 开发中非常重要的一部分。...通过使用 servlet 生成验证码、配置 servlet、显示验证码、验证验证码和刷新验证码,我们可以防止机器人攻击和恶意注册。

    java实现验证码产生功能

    图像的`src`属性指向一个Servlet,该Servlet负责生成并返回验证码图像。同时,将验证码值存入会话。 6. **用户输入验证**: 用户输入验证码后,前端会发送一个请求到服务器,此时服务器需要验证用户输入的验证码...

    Java 算术验证码图片

    Java产生简单算术验证码图片,此为Servlet需要配置web.xml,配置方法如下: &lt;servlet&gt; &lt;servlet-name&gt;authimg&lt;/servlet-name&gt; &lt;servlet-class&gt;img.AuthImg&lt;/servlet-class&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; ...

    采用ajax实现的图片验证码

    3、编写一个servlet,在servlet中产生图形验证码 ------------------------------------------------------------ //1、给客户端作出的回应是以图片的方式来回应 response.setContentType("image/jpeg"); ...

    随机生成验证码(JSP)

    在本项目中,我们将探讨如何使用JSP(JavaServer Pages)和Servlet来实现随机生成的验证码功能。下面将详细阐述相关知识点。 首先,验证码的生成通常涉及到以下几个步骤: 1. **随机数字或字母生成**:验证码通常...

    awt制作验证码的源码

    一个在登陆的时候产生验证码的类,可以根据需要转换成自己的action servlet 等 调用的部分可以用一个img 标签关联一个超连接就ok 了

    图文验证码模块

    这样既提高了用户体验,减少了网络请求的等待时间,又保证了每次验证的独立性,避免了因多人同时使用同一验证码而产生的安全问题。在实现时,需要在JavaScript中发送Ajax请求到服务器,服务器生成新的验证码并返回,...

    自定义验证码,登录后进行验证

    定义图片的width、定义图片的height、定义图片上显示验证码的个数 创建字体,字体的大小应该根据图片的高度来定 ...随机产生的颜色将验证码绘制到图像中 四位数字的验证码保存到Session中 将图像输出到Servlet输出流中

    jsp验证码简单示例

    在网页开发中,尤其是用户登录、注册、评论等场景,验证码能够有效地防止垃圾信息的产生,保护网站的安全。JSP(JavaServer Pages)作为服务器端的动态网页技术,可以方便地实现验证码的生成与验证。以下将详细介绍...

    jsp常用经典代码(md5java实现,生成中文/数字验证码,解决中文乱码)

    首先,`MD5`是一种广泛使用的加密散列函数,产生一个128位(16字节)的散列值,通常以32个十六进制数字的形式表示。在`MD5Java实现`中,开发者会使用Java的`java.security.MessageDigest`类来计算字符串的MD5值。...

    用代理避免ajax跨域请求(手机验证码)

    但有时我们需要从不同的源获取数据,如API服务、第三方接口等,这就产生了跨域需求。为了解决这个问题,出现了多种解决方案,其中一种就是使用代理服务器。 代理服务器的基本思想是在客户端(浏览器)和目标服务器...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    5.1 servlet与servlet容器 182 5.2 servlet容器的分类 183 5.3 servlet和其他技术的比较 183 5.4 tomcat介绍 183 5.5 tomcat的安装与配置 184 5.5.1 安装tomcat 185 5.5.2 运行tomcat 186 5.5.3 tomcat启动...

Global site tag (gtag.js) - Google Analytics