Java Web开发中验证码的实现(JSP验证码)

  通常的登录注册系统都会要求输入验证码以区别用户行为和计算机程序行为来防止恶意注册、暴力破解密码等。

  Jsp或者Java Web开发中通常用 Java 的 Graphics 绘制验证码图片然后用ImageIO输出为Jpg等格式的图片再通过Session来验证输入内容与验证码内容的一致性。

  具体代码和步骤如下:

  1.生成验证码的Servlet

Java Code
  1. package servlets;  
  2.   
  3. import java.io.IOException;  
  4. import javax.servlet.ServletException;  
  5. import javax.servlet.http.HttpServlet;  
  6. import javax.servlet.http.HttpServletRequest;  
  7. import javax.servlet.http.HttpServletResponse;  
  8. import javax.servlet.http.HttpSession;  
  9. import java.util.*;  
  10. import java.awt.*;  
  11. import java.awt.image.*;  
  12.   
  13. import javax.imageio.*;  
  14.   
  15. /** 
  16.  * Servlet implementation class test2 
  17.  */  
  18. public class GetCaptcha extends HttpServlet {  
  19.     private static final long serialVersionUID = 1L;  
  20.   
  21.     /** 
  22.      * @see HttpServlet#HttpServlet() 
  23.      */  
  24.     public GetCaptcha() {  
  25.         super();  
  26.         // TODO Auto-generated constructor stub  
  27.     }  
  28.   
  29.     /** 
  30.      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse 
  31.      *      response) 
  32.      */  
  33.     protected void doGet(HttpServletRequest request,  
  34.             HttpServletResponse response) throws ServletException, IOException {  
  35.         response.setContentType("image/jpeg");  
  36.         response.setHeader("Pragma""No-cache");  
  37.         response.setHeader("Cache-Control""no-cache");  
  38.         response.setDateHeader("Expires"0);  
  39.         HttpSession session = request.getSession();  
  40.         // 在内存中创建图象  
  41.         int width = 75, height = 25;  
  42.         BufferedImage image = new BufferedImage(width, height,  
  43.                 BufferedImage.TYPE_INT_RGB);  
  44.         // 获取图形上下文  
  45.         Graphics g = image.getGraphics();  
  46.         // 生成随机类  
  47.         Random random = new Random();  
  48.         // 设定背景色  
  49.         g.setColor(getRandColor(200250));  
  50.         g.fillRect(00, width, height);  
  51.         // 设定字体  
  52.         g.setFont(new Font("Times New Roman", Font.PLAIN, 24));  
  53.         // 画边框  
  54.         g.setColor(getRandColor(160200));  
  55.         g.drawRect(00, width - 1, height - 1);  
  56.         // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到  
  57.         g.setColor(getRandColor(160200));  
  58.         for (int i = 0; i < 155; i++) {  
  59.             int x = random.nextInt(width);  
  60.             int y = random.nextInt(height);  
  61.             int xl = random.nextInt(12);  
  62.             int yl = random.nextInt(12);  
  63.             g.drawLine(x, y, x + xl, y + yl);  
  64.         }  
  65.         // 取随机产生的认证码(4位数字)  
  66.         String sRand = "";  
  67.         for (int i = 0; i < 4; i++) {  
  68.             String rand = String.valueOf(random.nextInt(10));  
  69.             sRand += rand;  
  70.             // 将认证码显示到图象中  
  71.             g.setColor(new Color(20 + random.nextInt(110), 20 + random  
  72.                     .nextInt(110), 20 + random.nextInt(110)));  
  73.             // 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成  
  74.             g.drawString(rand, 13 * i + 1420);  
  75.         }  
  76.   
  77.         // 将认证码存入SESSION  
  78.         session.setAttribute("vcode", sRand);  
  79.   
  80.         // 图象生效  
  81.         g.dispose();  
  82.         // 输出图象到页面  
  83.         ImageIO.write(image, "JPEG", response.getOutputStream());  
  84.     }  
  85.   
  86.     /** 
  87.      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse 
  88.      *      response) 
  89.      */  
  90.     protected void doPost(HttpServletRequest request,  
  91.             HttpServletResponse response) throws ServletException, IOException {  
  92.         // TODO Auto-generated method stub  
  93.     }  
  94.   
  95.     Color getRandColor(int fc, int bc) {// 给定范围获得随机颜色  
  96.         Random random = new Random();  
  97.         if (fc > 255)  
  98.             fc = 255;  
  99.         if (bc > 255)  
  100.             bc = 255;  
  101.         int r = fc + random.nextInt(bc - fc);  
  102.         int g = fc + random.nextInt(bc - fc);  
  103.         int b = fc + random.nextInt(bc - fc);  
  104.         return new Color(r, g, b);  
  105.     }  
  106.   
  107. }  

  2.web.xml中添加上面Servlet的映射信息

XML/HTML Code
  1. <servlet>  
  2.    <description>用于生成验证码</description>  
  3.    <display-name>生成验证码</display-name>  
  4.    <servlet-name>GetCaptcha</servlet-name>  
  5.    <servlet-class>servlets.GetCaptcha</servlet-class>  
  6. </servlet>  
XML/HTML Code
  1. <servlet-mapping>  
  2.   <servlet-name>GetCaptcha</servlet-name>  
  3.   <url-pattern>/getcaptcha.sl</url-pattern>  
  4. </servlet-mapping>  

  3.在前台界面中调用此Servlet

XML/HTML Code
  1. <img src="getcaptcha.sl" alt="验证码" name="checkImg" id="checkImg" style="position:relative; top:5px; left:20px; " onClick="document.getElementById('checkImg').src='getcaptcha.sl?temp='+ (new Date().getTime().toString(36)); return false"/>  

  直接点击图片更换验证码。

 

(转载请指明出处)

3d加速芯片的评论:

看见代码 就头疼啊

湖南SEO的评论:

介个确实很给力,学习 了

3老的评论:

呵呵,不错为博客啊!

西安铁丝网的评论:

不错的东西。原来这样啊

泥灸的评论:

不懂代码,要深入再学习

kingsize的评论:

呵呵,不错的东西。原来这样啊

深圳网络公司的评论:

很久没写代码了,渐渐生疏了。

爱上梦家纺博客的评论:

代码不错呢?怪不得人气很高的。

无锡seo的评论:

我也学软件的,不过阵亡了无锡公共营养师培训 http://wx.pxto.com.cn/JiGou/Course.asp?id=8d8d6d63ce2c15d3&cid=417177

无锡seo的评论:

我也学软件的,不过阵亡了

最新热门的评论:

编程应该是个前景不错的行业

数控压力机的评论:

太深奥了!理解不了!

龙门铣的评论:

很好,很强大!

DIY抱枕的评论:

博主写的很好啊,来顶一下

高桥大市场的评论:

我看到这些代码,真佩服博主,赞,真赞!!!

爱上梦家纺博客的评论:

看不懂这些代码是什么,收藏了再说

客厅地毯品牌排行榜的评论:

编程,对于我这样的人来说真是天文呀

丸美眼霜的评论:

有待慢慢学习。。。

可爱多返利网的评论:

行业不错,需要好好学习

抱枕的评论:

看不怎么太懂,呵呵

高桥信息港的评论:

不错的文章,博主的说的很有道理,下次还会经常光顾你的博客

奥泄汀延时喷剂的评论:

博客很火吗?验证码这东东玩过,JSP的不试过!

免费商城的评论:

这个确实 很强大 。

巴贝拉菜单的评论:

我的专业就是编程!但是我不喜欢这个啊!

水产行业的评论:

恩,满不错的哈。我把代码复制走了啊

htcsensation的评论:

明天的这个时候辛卯年(兔)十月十四 2011-11-9我还来顶你t9zp9v

老人礼物网的评论:

全是代码,不太懂!

奥泄汀延时喷剂的评论:

博主你想的太全面了,代码天衣无缝,不过就是有点长

泡澡的评论:

全都是代码,懂不多啊...

足浴的评论:

表示很复杂的文章啊。。

儿童益智玩具的评论:

很具体的方法,收藏了

商务送礼的评论:

看见代码就头疼.
还有博主很久没更新咯.

果蔬解毒机的评论:

不经意的停留却有出乎意料的收获

装修快车网的评论:

楼主写得不错哦,亲,给力一下

老人礼物网的评论:

来过拜访,学习成长中!

顶屋韩国空间的评论:

不错的文章,学习了,

水星家纺官方网站fa的评论:

ka8gw9我班都还没得下,你们就吃饭fa

九洲鹿床品fa的评论:

z5fv3j谢谢你的文章 我很感动fa

安吉农家乐的评论:

ka6gw6说过的永远不知能否兑现

海龟制氧机的评论:

ka6gw6你的内心与你的外表

2688购物的评论:

j1pf1l跟我的差不多。。。

missoni的评论:

就刚刚辛卯年(兔)九月十六 2011-10-12………为什么z7fv7b评论还要审核

男人的最爱的评论:

小小姑娘 清晨起床 背起书包 上学堂

水果去角质膏的评论:

其实也没必要太纠结。

missoni的评论:

就刚刚辛卯年(兔)九月十四 2011-10-10………为什么e0ka0h评论还要审核

喜梦宝官方网站的评论:

8iy8eu林子大了 什么鸟都有

男人的最爱的评论:

留下我的足迹 分享你的微薄

安耐驰汽车抗摩剂的评论:

就刚刚辛卯年(兔)九月十三 2011-10-9………为什么9hx9dt评论还要审核

左旋肉碱的评论:

方法貌似还不错。。收藏了

本草世家的评论:

博主分析的很不错呀

青岛设备管理的评论:

博主过来顶了,继续更新呀

安耐驰汽车抗摩剂的评论:

就刚刚辛卯年(兔)九月十二 2011-10-8………为什么0oe0si评论还要审核

顾家工艺沙发的评论:

0mc0iy谢谢你 你真是个好人 明天我在来

安耐驰汽车抗摩剂的评论:

就刚刚辛卯年(兔)九月十一 2011-10-7………为什么7jh5nd评论还要审核

香袭人丰胸精油的评论:

n9tj9p如果爱可以从来 我绝对不会放开

优尚美家沙发的评论:

b9hx9e明天你还会更新的吧 明天我在来

九洲鹿的评论:

xn7tj7谢谢你的文章 我很感动

顾家工艺官网的评论:

v1br1x谢谢你 你真是个好人 明天我在来

顾家工艺怎么样的评论:

c8iy8e谢谢你 你真是个好人 明天我在来

竹纤维加盟的评论:

x9dt9z你说走就走 让爱到尽头

黑吧dj的评论:

就刚刚辛卯年(兔)九月初九 2011-10-5………为什么b7h7nd评论还要审核

黑吧dj的评论:

就刚刚辛卯年(兔)九月初七 2011-10-3………为什么fv5br5评论还要审核

激光治疗仪之家的评论:

我现在最愁的事情就是不会编程,唉。

黑吧dj的评论:

就刚刚辛卯年(兔)九月初六 2011-10-2………为什么yo6uk6评论还要审核

优尚美家官网的评论:

xn1tj1明天你还会更新的吧 明天我在来

顾家工艺官网的评论:

wm0si0谢谢你 你真是个好人 明天我在来

黑吧dj的评论:

就刚刚辛卯年(兔)九月初五 2011-10-1………为什么i2pf3l评论还要审核

太尔即热式电热水器的评论:

为啥自己留言看不见cs2gw0

跑步机的评论:

代码简单但很强大 感觉还好了。

weftedhairextensions的评论:

Java程序到底是干什么的啊?

杭州保健的评论:

http://www.hzanmola.info 杭州保健按摩 也转载了。

卤菜加盟的评论:

不是很明白这些代码

龙门铣的评论:

做编程很辛苦的

水果去角质膏99的评论:

其实也没必要太纠结。99

喜来淘网的评论:

高深,真的看不懂,要好好学习才行。

小然的评论:

很高兴见到这篇文章

小然的评论:

哈哈哈哈哈哈哈哈哈哈哈哈哈哈v

灰指甲的治疗方法的评论:

灰指甲的治疗方法 http://www.bestjinjia.net

百家乐用品的评论:

这个行业前途广阔啦

513e5a9ae信鸽药品的评论:

513e5a9ae顶一个4mcs2y 我喜欢这个博爱

有意思啊的评论:

2br3xn现在这样的博客越来越少了

香袭人2代的评论:

gw6ka4因为我已经明白那全是为了爱

巴中论坛的评论:

有网站就有编程,不过JSP实在不懂呀

天津保健按摩的评论:

支持个 写的棒集了 哈哈

进口红酒的评论:

看不太懂,好像蛮复杂的

如何网的评论:

这个应该挺有用的。

佛山LED的评论:

2011创业 首选《南邦照明》www.led-1688.com LED灯具!

DMOLD模具设计的评论:

又重温了JAVA一遍,收获蛮大的。

兴隆记肇庆特产的评论:

谢谢,学习了很多东西。

tvdvdset的评论:

不太适合菜鸟啊

义乌房产的评论:

刚学这些,看不懂吖,不过支持支持

爱米特的评论:

博主的内容不错!值得学习!

牛初乳哪个好的评论:

看不懂 不过支持下。。

广东硅谷学院的评论:

这些都是比较基础的,可以自己去深入学习。

手机充值卡进货的评论:

不错,来逛逛,学习一下

佛山LED的评论:

2011创业 首选《南邦照明》www.led-1688.com LED灯具!

掏宝网购的评论:

编程,不会,学习吧!

识字的评论:

你通不通过我的留言,我就在那里,不悲不喜

百家乐用品的评论:

这个行业怎么样啊

jhgcw的评论:

没学过java,路过。。。。

减肥产品排行榜的评论:

继续更新吧,关注中。。

百家乐用品的评论:

哈哈 懂点技术做销售才好咯

ecosway的评论:

学习学习,收藏一下

淘宝皇冠店的评论:

做这行真是苦活累活啊 ~~~

如何瘦脸的评论:

来踩踩, 沙发一下了

如何瘦脸的评论:

学习学习,收藏一下

如何瘦脸的评论:

来看看,了解一下,继续更新吧。

让爱飞的评论:

支持下,学习下~
顺便,还请博主关注我的原创DV《让爱飞》(Lost love)是中国第一部描写程序员的银幕电影。观看地址是:<a href="http://v.youku.com/v_show/id_XMjg1MDkxNDY0.html">http://v.youku.com/v_show/id_XMjg1MDkxNDY0.html</a>

大金中央空调的评论:

这篇文章写的真的很不错已经被www.zcm-cn.com所转载。

mbtzapatos的评论:

学习了,楼主辛苦了

mbtshoes的评论:

虽然也是学代码,但是看不懂,惭愧哈

让爱飞的评论:

技术贴 很好


顺便,还请博主关注我的原创DV《让爱飞》(Lost love)是中国第一部描写程序员的银幕电影。观看地址是:<a href="http://v.youku.com/v_show/id_XMjg1MDkxNDY0.html">http://v.youku.com/v_show/id_XMjg1MDkxNDY0.html</a>

灰指甲怎么治疗的评论:

来踩踩,继续更新吧,支持中。。

如何瘦脸的评论:

来踩踩, 支持一下。

幼儿教育网的评论:

幼儿教育网

www.china-youjiao.com
很不错的博客网站,值得我关注,收藏起来先

尚人绣的评论:

非常不错的验证码实现,已经转载到http://www.shangrenxiu.com/我的尚人绣博客了。

化妆的评论:

互访互访,我来了

欢迎来我的博客www.wxhzs.com回访,一定来哦

华威锻件的评论:


大地春如海,男儿国是家,龙灯花鼓夜,长剑走天涯。 华威锻件祝博主快乐幸福!






灰指甲的治疗方法的评论:

来踩一下,记得回访哦。

软木墙板的评论:

来看看啊,博主好久没更新了!

dfghf的评论:

文章写的好极了http://www.shbangan.com进行了转载!

现金斗地主的评论:

很好很强大!!支持博主 编程很牛叉

如何瘦脸的评论:

来看看,了解一下。

左旋三合一减肥咖啡的评论:

来学习 学习,收藏了。挺不错的。

滨州网站建设的评论:

www.seo66.org/binzhou来支持下博主哦

代孕的评论:

看不懂哦!!!!!

信报箱的评论:

这个技术不错,学习了,jsp验证码!

天天npc的评论:

好专业~好高深哦!牛逼的博主!!!

减肥药排行榜的评论:

凡事代码一律收藏。

天津五大道美食的评论:

现在手机编程貌似火热程度已经超过pc段

亚洲数学网的评论:

这个技术要学习一下

宁波废铁回收的评论:

人气很不错,不过很久没更新了哦。

代孕的评论:

很不错!!!!学习了!!!!!!!!!!!

软木地板的评论:

不错的文章! 学习了

瘦身咖啡的评论:

学习一下,虽然有些渺茫,呵呵。

mbtshose的评论:

快考试了,烦死了,又要去挑灯夜读

nhljerseys的评论:

生活总是简单,自己找乐

七彩美瞳的评论:

为数不多的全技术文章博客
我喜欢博主的标题,但是代码这玩意儿我不太敢喜欢,一瞄就晕了。
等实在需要时,再来博主这蹭蹭吧,哈哈。

威骋自动化的评论:

支持一下~~~
http://www.pm1234.com

电阻成型机|IC成型机|电容剪脚机|电脑剥线机|端子机|端子压着机|电动剥皮机|PC板分板机|PC板切脚机|零件成型机|切带机|折板机|IC磨字机|零件成型机|电阻成型机|磨刀机|跳线机|气动成型机|手浸式锡炉,自动送料盘|V-CUT分板机

热奇影视的评论:

代码。。。我看不懂

度假啦旅游网的评论:

内容不错,支持楼主!

佛珠的评论:

不知道要说少两个字母 会怎么样的呢

保姆的评论:

额,是这样啊。看到代码头疼

天涯阁的评论:

天涯阁博客来访

王磊的博客的评论:

不错,来学习学习了

天天npc的评论:

这个真没有看懂~哈哈~
不过博主这个写得好哦~
博主你好!我是快乐的大脚~
我的单机游戏下载wordpress博客——天天NPC网
每天都保持原创更新
今天更新一篇好东东哦!
《成人游戏排行榜榜首《撕掉她的衣服》PC电脑版下载》
http://www.ttnpc.com/1043.html
欢迎来试试水哦~~

邱嵩松的评论:

编程是很伤脑筋呢

华威锻件的评论:








老骥伏枥,志在千里。 烈士暮年,壮心不已。 华威锻件祝博主快乐幸福!

电商圈的评论:

有些看不懂,但想把站做好,还得学好才行。

信报箱的评论:

呵呵,不错哦!

美国留学的评论:

这篇文章非常不错已经被美国留学http://www.shjfy.com.cn进行了转载

宋若愚的评论:

太强大了
围观下

小春哥的评论:

有点难度啊
加油

nhljerseys的评论:

这么不错啊。可以学的很费时间

mbtshose的评论:

很强跟关键啊!

李二的评论:

其实有时候的许多东西没必要自己写了,网上的东西已经太多了。但我们还去做,因为我们喜欢,

newdomer的评论:

不错,学习了。

成都上门推拿的评论:

不错我也想学编程!可是我学历不高,不懂

泰安保健的评论:

学习了!这个博客不错啊!

自贡SEO的评论:

技术很强悍的说 ,程序员现在工资都不错,我想走这路了

华威锻件的评论:










轻轻的来,轻轻的走,不带走一片云彩,却留下一些印记。华威锻件祝博主快乐幸福!





铭涵的评论:

编程太伤脑细胞了。啊

安徽seo的评论:

刚刚有个朋友还问这个问题呢,搜到你的站了,学习了。

青岛红酒的评论:

来看看啦 留个脚印

青岛红酒的评论:

来看看啦 留个脚印

防盗门的评论:

这个还是很不错的

虎子的评论:

程序员属于技术,技术永远不是社会的主流

减肥瘦身的评论:

这个真是比较麻烦,哎,,受不了了。

四川理工大学大学生校园团购网的评论:

四川理工大学大学生校园团购网www.sclgdx.com 整的不错 加油HahaHahaHahaHaha

四川理工大学大学生校园团购网的评论:

四川理工大学大学生校园团购网 www.sclgdx.com

弥勒cat的评论:

博主的文章真好,支持! http://www.shjingshirc.com

淘宝返利网的评论:

代友真让人头痛!

追梦人的评论:

哈!
是搞IT的
还是搞网络的

减肥咖啡的评论:

编程很费脑筋啊 呵呵

mr.ing的评论:

学习编程的。可以自己写写

宋一把的博客的评论:

很早以前写过php的验证码 其实是抄的LAMP兄弟连的代码

晨光博客的评论:

有蛮久没有更新了哦

nikeshox的评论:

大哥 好久没更新咯

pba的评论:

这个功能很强大 。

卢松松的评论:

搞JSP开发啦?
littlear 于 2011-3-28 19:19:32 回复
没有 自己做点小东西。

宁波LED的评论:

这JAVA代码我喜欢。。。转走了

宁波LED的评论:

编程的都很辛苦啊,为什么搞技术的就这么廉价啊,技术不是最重要的嘛?累死累活就这么点工资,悲哀啊

dudo的评论:

封装完毕直接使用……而且这种东西不宜太复杂

左旋三合一减肥咖啡的评论:

学习下,就缺乏代码知识

Asixer博客的评论:

温习一下了,以前很容易写这样的代码,现在不做软件了,看起来有点生啊 呵呵 支持博主

二手机械进口报关的评论:

程序就是把手工用机械化代替!

减肥产品排行榜的评论:

现在这种代码很多啊。而且有很多功能更加强大的。。学习编程的。可以自己写写啊。。

雕铣机的评论:

现在很多程序员跟农民工没什么两样

网络的评论:

编程应该是个前景不错的行业

发表评论:

网站分类

最新评论及回复

文章归档