文档章节

jsp验证码生成

南久久
 南久久
发布于 2017/06/04 10:40
字数 447
阅读 13
收藏 0

一 JAVA代码(转载,并非原创,谢谢作者,虽然我不知道作者是谁):

package 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.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

 

public class RandomServlet extends HttpServlet {

    
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // 在内存中创建图象
        int width = 85, 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.PLAIN, 18));
        // 随机产生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);
        }
        // 取随机产生的认证码(6位数字)
        String sRand = "";
        for (int i = 0; i < 6; 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);
        }
        // 图象生效
        g.dispose();
        
        try {
            ImageIO.write(image, "JPEG", response.getOutputStream());
        } catch (Exception e) {
            System.out.println("验证码图片产生出现错误:" + e.toString());
        }
        //保存验证码到Session
        request.getSession().setAttribute("randStr", sRand);
        
    }


    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        this.doGet(request, response);
    }
    /*
     * 给定范围获得随机颜色
     */
    private 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);
    }
}

二 web.xml配置:

    <servlet>
        <servlet-name>RandomServlet</servlet-name>
        <servlet-class>servlet.RandomServlet</servlet-class>
    </servlet>

    <servlet-mapping>
       <servlet-name>RandomServlet</servlet-name>
       <url-pattern>/random.jpg</url-pattern>
    </servlet-mapping>

 

 

三 jsp代码:

<img src="random.jpg" width="109" height="40" id="randomCode"/>
<a href="javascript:changeCode()">看不清楚,换张图片</a>

<script type="text/javascript">
function changeCode() {
    document.getElementById("randomCode").src="random.jpg?"+new Date().getMilliseconds();
}
</script>

© 著作权归作者所有

共有 人打赏支持
上一篇: 创建序列
下一篇: 导包
南久久
粉丝 0
博文 44
码字总数 20109
作品 0
银川
私信 提问
Java里使用patchca生成验证码

Patchca是Piotr Piastucki写的一个java验证码开源库,打包成jar文件发布,patchca使用简单但功能强大。 本例实现了自定义背景,由于生成图片较小,波动太大时会导致部分文字显示不全,所以更...

easonwang
2014/04/14
0
0
Java实现的验证码(Verification Code)

目前,不少网站为了防止用户利用机器人自动注册、登录、灌水,都采用了验证码技术。Java中可由以下代码生成验证码: 编写一个Servlet,用于生成验证码图片: package flybug.hq.vcode; impor...

Jupittar
2013/09/09
0
0
请教验证码刷新的问题

1.今得一验证码类库,配置如何: jcaptcha com.octo.captcha.module.servlet.image.SimpleImageCaptchaServlet jcaptcha /jcaptcha.jpg 2.页面配置: 验证码 3.当F5刷新页面,则验证码图片变换 ...

Macrotea
2011/05/24
1K
6
页面上取session的值,jsp页面报错

这个是随机生成验证码的类,把生成的验证码放在了session里面,我想在jsp页面取一下session里面的值,我在jsp页面是这样写的 页面报jsp错误,不知道是啥原因 求教 这个是跑的debug...

薄暮凉年
2014/11/25
531
3
java web验证码生成总结(包括servlet、jsp和struts2实现)(转)

一、使用纯Servlet实现验证码 (1)在web.xml配置: [java] view plaincopy <servlet> <servlet-name>image</servlet-name> <servlet-class>org.test.web.AuthImage</servlet-class> </servlet>......

Famp
2014/07/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Confluence 6 自定义你的空间

通过对你的空间进行界面的自定义能够让你的空间更加出类拔萃。 如果你具有空间管理员权限,你可以修改你空间的颜色配色,添加你自己的空间标识,选择是否在你空间中显示边栏。或者你可以进入...

honeymose
23分钟前
0
0
Ubuntu18.04 安装MySQL

1.安装MySQL sudo apt-get install mysql-server 2.配置MySQL sudo mysql_secure_installation 3.设置MySQL非root用户 设置原因:配置过程为系统root权限,在构建MySQL连接时出现错误:ERROR...

AI_SKI
今天
3
0
3.6 rc脚本(start方法) 3.7 rc脚本(stop和status方法) 3.8 rc脚本(以daemon方式启动)

3.6-3.7 rc脚本(start、stop和status方法) #!/usr/bin/env python# -*- coding: utf-8 -*-# [@Version](https://my.oschina.net/u/931210) : python 2.7# [@Time](https://my.oschina.......

隐匿的蚂蚁
今天
3
0
Cnn学习相关博客

CNN卷积神经网络原理讲解+图片识别应用(附源码) 笨方法学习CNN图像识别系列 深度学习图像识别项目(中):Keras和卷积神经网络(CNN) 卷积神经网络模型部署到移动设备 使用CNN神经网络进行...

-九天-
昨天
5
0
flutter 底部输入框 聊天输入框 Flexible

想在页面底部放个输入框,结果键盘一直遮住了,原来是布局问题 Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("评论"), ...

大灰狼wow
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部