Java Web開發(fā)之圖形驗(yàn)證碼的生成與使用方法
本文實(shí)例講述了Java Web開發(fā)之圖形驗(yàn)證碼的生成與使用方法。分享給大家供大家參考。具體如下:
圖形驗(yàn)證碼的主要目的是為了增強(qiáng)的安全性,增加用戶通過(guò)遍歷所有可能性來(lái)破解密碼的難度。
圖形驗(yàn)證碼的使用包括如下3部分:
① 圖形驗(yàn)證碼的生成;
② 在頁(yè)面中的使用;
③ 驗(yàn)證;
1、圖形驗(yàn)證碼的生成
假設(shè)在Servlet生成圖形驗(yàn)證碼,在JavaBean或者JSP中生成的基本過(guò)程是相同的。設(shè)計(jì)如下過(guò)程:
① 設(shè)置響應(yīng)的文檔類型;
② 生成隨機(jī)碼;
③ 把隨機(jī)碼保存到session中;
④ 生成圖片;
⑤ 把隨機(jī)碼畫到內(nèi)存圖片上;
⑥ 把內(nèi)存圖片發(fā)送到客戶端;
1.1 設(shè)置響應(yīng)的文檔類型
在對(duì)用戶進(jìn)行響應(yīng)的時(shí)候,需要設(shè)置文檔類型,要生成圖片文檔類型可以設(shè)置為:image/gif。
在Servlet中的設(shè)置方式為:response.setContentType("image/gif");
如果在JSP頁(yè)面中使用則需要使用:<%@ page contentType="image/gif"%>
1.2 生成隨機(jī)碼
可以根據(jù)各種隨機(jī)數(shù)生成策略來(lái)生成,并且可以設(shè)置隨機(jī)碼有哪些字符組成以及隨機(jī)碼的長(zhǎng)度。
本文給出的隨機(jī)碼字符是所有字母和數(shù)字。使用的隨機(jī)碼生成策略使用的是Random對(duì)象提供的。參考代碼如下:
隨機(jī)碼字符列表:
public static final char[] code = {'a','b','c','d','e','f','g',
'h','i','j','k','l','m','n',
'o','p','q','r','s','t',
'u','v','w','x','y','z',
'A','B','C','D','E','F','G',
'H','I','J','K','L','M','N',
'O','P','Q','R','S','T',
'U','V','W','X','Y','Z',
'0','1','2','3','4',
'5','6','7','8','9'};
生成隨機(jī)碼的代碼:
StringBuffer checkcode=new StringBuffer();
// 每循環(huán)一次,生成一位
for(int i=0;i<code_length;i++)
{
int generated=(new Random()).nextInt(62);
checkcode.append(code[generated]);
}
1.3 把隨機(jī)碼保存到session中
為了在用戶提交驗(yàn)證碼之后進(jìn)行驗(yàn)證,需要保存生成的驗(yàn)證碼,可以保存在session中。在Servlet中需要先獲取session對(duì)象,然后再使用。
下面是參考代碼:
// 把生成的驗(yàn)證碼保存到session中
HttpSession session=request.getSession(true);
session.setAttribute("checkCode",checkcode.toString());
1.4 生成圖片
使用BufferedImage類創(chuàng)建對(duì)象,然后使用畫圖對(duì)象畫圖。下面是參考代碼:
// 創(chuàng)建內(nèi)存圖片,參數(shù)為圖片的大小以及類型 BufferedImage image = new BufferedImage(49,14,BufferedImage.TYPE_INT_RGB); // 得到Graphics句柄 Graphics g = image.getGraphics(); // 設(shè)置畫筆顏色 // g.setColor(Color.yellow); // 畫背景 g.fillRect(0,1,49,12); 1.5 把隨機(jī)碼顯示在圖片上 參考下面的代碼: // 設(shè)置字體色 g.setColor(Color.black); // 畫驗(yàn)證碼 g.drawString(checkcode.toString(),4,11); // 圖象生效 g.dispose();
1.6 把生成的圖片發(fā)送到客戶端
參考代碼如下:
這樣就完成了動(dòng)態(tài)圖形驗(yàn)證碼的生成。
2、在頁(yè)面中使用圖形碼:
與使用其它圖形的方式相同,使用<img src="…">標(biāo)簽。假設(shè)生成圖片的Servlet的url-pattern值為checkcode,則在頁(yè)面中加載圖片的代碼如下:
3、驗(yàn)證
獲取用戶輸入的驗(yàn)證碼,然后從session中獲取保存的驗(yàn)證碼,對(duì)比來(lái)確定是否相同,從而完成驗(yàn)證。
希望本文所述對(duì)大家的JSP程序設(shè)計(jì)有所幫助。
相關(guān)文章
如何在Jsp中使用JDBC來(lái)聯(lián)結(jié)MySql
如何在Jsp中使用JDBC來(lái)聯(lián)結(jié)MySql...2006-10-10
struts2的select標(biāo)簽用法實(shí)例分析
這篇文章主要介紹了struts2的select標(biāo)簽用法,較為詳細(xì)的分析了Struts2中select標(biāo)簽的功能、定義及使用技巧,需要的朋友可以參考下2015-09-09
jsp利用application統(tǒng)計(jì)在線人數(shù)的方法
這篇文章主要介紹了jsp利用application統(tǒng)計(jì)在線人數(shù)的方法,代碼中備有較為詳盡的注釋便于理解,是比較實(shí)用的技巧,需要的朋友可以參考下2015-01-01
Eclipse XSD 生成枚舉類型的Schema的實(shí)例詳解
這篇文章主要介紹了Eclipse XSD 生成枚舉類型的Schema的實(shí)例詳解的相關(guān)資料,希望通過(guò)本能幫助到大家,需要的朋友可以參考下2017-09-09
jsp使用ECharts動(dòng)態(tài)在地圖上標(biāo)識(shí)點(diǎn)
echarts地圖展示功能很強(qiáng)大,官網(wǎng)上靜態(tài)展示的例子很多了,動(dòng)態(tài)的資料少,需要參考本文的可以進(jìn)來(lái)了解一下。2016-10-10

