《JavaWeb---防恶意注册应用---输出随机验证图片》
输出随机图片就是为了防止恶意注册
因此要对图片做相应的处理,避免被某些程序识别
//生产图片的Servlet
package com.fenghuo.drawp;import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
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 Draw extends HttpServlet {/*** Title: 输出随机的验证图片* Copyright: Copyright (c) 2012 * @author 烽火* @version 1.0 2012-09-11**/private static final long serialVersionUID = 2900568393447169269L;public static final int WIDTH = 120;public static final int HEIGHT = 35;public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//在内存中构建一幅图片BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);Graphics g = image.getGraphics();//设置背景色setBackGround(g);//设置边框setBorder(g);//画干扰线drawRandomLine(g);//写随机数drawRandomNum((Graphics2D) g);//图形写给浏览器response.setContentType("image/jpeg");ImageIO.write(image, "jpg", response.getOutputStream());//控制浏览器不要缓存//测试的时候未成功,不知道什么原因。望高手指出response.setDateHeader("expries", -1);response.setHeader("Cache-Control", "no-cache");response.setHeader("Pragma", "no-cache");}private void drawRandomNum(Graphics2D g) {g.setColor(Color.RED);g.setFont(new Font("宋体", Font.BOLD, 20));//其实在此加汉字也可以,作为程序员,你懂得//生成Unicode码的程序我已写好,参考http://blog.csdn.net/w695050167/article/details/7968561//由于原程序代码太多此处只做简单的事例String chinese = "\u4e19\u5de6\u5389\u53f3\u77f3\u5e03\u9f99\u5e73\u706d\u8f67\u4e1c\u5361\u5317\u5360\u4e1a";int x = 5;for (int i = 0; i < 4; i++){//生成旋转的角度int theta = new Random().nextInt()%30;//得到写到画板上的数据String str = chinese.charAt(new Random().nextInt(chinese.length()))+"";//旋转画板g.rotate(theta*Math.PI/180, x, 20);g.drawString(str, x, 20);//将画板复原g.rotate(-theta*Math.PI/180, x, 20);x += 30;}}private void drawRandomLine(Graphics g) {g.setColor(Color.GREEN);for (int i = 0; i < 5; i++){//生成随机直线的两点坐标int x1 = new Random().nextInt(WIDTH);int y1 = new Random().nextInt(HEIGHT);int x2 = new Random().nextInt(WIDTH);int y2 = new Random().nextInt(HEIGHT);g.drawLine(x1, y1, x2, y2);}}private void setBorder(Graphics g) {g.setColor(Color.BLUE);g.drawRect(1, 1, WIDTH-2, HEIGHT-2);}private void setBackGround(Graphics g) {g.setColor(Color.WHITE);g.fillRect(0, 0, WIDTH, HEIGHT);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
注册页面,生成随机图片
<!DOCTYPE html>
<html><head><title>register.html</title><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="this is my page"><meta http-equiv="content-type" content="text/html; charset=UTF-8"><!-- 点击图片后重新加载图片 --><script type="text/javascript">function changeImage(img){img.src = img.src + "?" + new Date().getTime();}</script></head><body><form action="" method="post">用户名:<input type="text" name="username"><br/>密码:<input type="text" name="password"><br/>验证码:<img src="/myweb/servlet/Draw" οnclick="changeImage(this)" alt="换一张" style="cursor:hand"/><br/><input type="text" name="chechcode"><br/><input type="submit" value="注册"></form></body>
</html>
《JavaWeb---防恶意注册应用---输出随机验证图片》相关推荐
- ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)
视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...
- ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析
视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...
- 信息学奥赛真题解析(玩具谜题)
玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...
- 信息学奥赛之初赛 第1轮 讲解(01-08课)
信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...
- 信息学奥赛一本通习题答案(五)
最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...
- 信息学奥赛一本通习题答案(三)
最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...
- 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题
第1章 快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章 素数 第 3 章 约数 第 4 章 同余问题 第 5 章 矩阵乘法 第 6 章 ...
- 信息学奥赛一本通题目代码(非题库)
为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...
- 信息学奥赛一本通(C++版) 刷题 记录
总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...
- 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离
首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...
最新文章
- java 自定义注解
- 从Python中readline()函数读取的一行内容中去掉换行符\n
- navicat设置数据表的外键
- 计算机学校综合管理系统论文,学校综合管理系统的设计与实现毕业设计论文.doc...
- spring mvc处理静态资源
- 电学 —— 库仑定律
- 无线网络中终端设备接入过程
- mysql io线程 原理_mysql 原理 ~ 线程与IO
- 10min说完淘宝最初10年的产品故事
- python中字节(bytes)是如何转换成整型(long)的?
- 经典软件典范龙卷风网络收音机功能详解
- 前端企业级代码规范(巨详细)
- 素人程序员:如何在技术浪潮更迭中保持较高成长速度?
- java 外码 内码_什么是汉字的内码、外码、交换码、字形码?
- PTA 7-274 魔镜
- 【OpenMMLab AI实战营 学习笔记 DAY(四)-- 目标检测基础知识及评估方法】
- 2018沈阳J How Much Memory Your Code Is Using?
- 关于射频和微波PCB设计注意事项
- dropbox被封, 试试金山快盘
- Linux - dsta 命令详解