输出随机图片就是为了防止恶意注册

因此要对图片做相应的处理,避免被某些程序识别

//生产图片的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---防恶意注册应用---输出随机验证图片》相关推荐

  1. ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  2. ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  3. 信息学奥赛真题解析(玩具谜题)

    玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...

  4. 信息学奥赛之初赛 第1轮 讲解(01-08课)

    信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...

  5. 信息学奥赛一本通习题答案(五)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  6. 信息学奥赛一本通习题答案(三)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  7. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  8. 信息学奥赛一本通题目代码(非题库)

    为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...

  9. 信息学奥赛一本通(C++版) 刷题 记录

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...

  10. 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离

    首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...

最新文章

  1. java 自定义注解
  2. 从Python中readline()函数读取的一行内容中去掉换行符\n
  3. navicat设置数据表的外键
  4. 计算机学校综合管理系统论文,学校综合管理系统的设计与实现毕业设计论文.doc...
  5. spring mvc处理静态资源
  6. 电学 —— 库仑定律
  7. 无线网络中终端设备接入过程
  8. mysql io线程 原理_mysql 原理 ~ 线程与IO
  9. 10min说完淘宝最初10年的产品故事
  10. python中字节(bytes)是如何转换成整型(long)的?
  11. 经典软件典范龙卷风网络收音机功能详解
  12. 前端企业级代码规范(巨详细)
  13. 素人程序员:如何在技术浪潮更迭中保持较高成长速度?
  14. java 外码 内码_什么是汉字的内码、外码、交换码、字形码?
  15. PTA 7-274 魔镜
  16. 【OpenMMLab AI实战营 学习笔记 DAY(四)-- 目标检测基础知识及评估方法】
  17. 2018沈阳J How Much Memory Your Code Is Using?
  18. 关于射频和微波PCB设计注意事项
  19. dropbox被封, 试试金山快盘
  20. Linux - dsta 命令详解

热门文章

  1. 利用Element UI的滑块Slider实现刻度尺
  2. java heap space解决方法
  3. AT指令集 CREG、CGREG、CEREG
  4. 大一大学计算机考试考什么,大学计算机一级考试考什么 考试时间
  5. 洗衣店洗鞋店小程序功能介绍
  6. Android Framework 记录
  7. 用Python实现PPT转化图片
  8. js html颜色代码,原生js编写的浏览器安全色网页拾色器色盘 生成颜色代码
  9. 快速搭建使用FRP内网穿透服务
  10. Linux下共享库的查找顺序