佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > Java Web開(kāi)發(fā)之圖形驗(yàn)證碼的生成與使用方法

Java Web開(kāi)發(fā)之圖形驗(yàn)證碼的生成與使用方法

熱門(mén)標(biāo)簽:Mysql連接數(shù)設(shè)置 科大訊飛語(yǔ)音識(shí)別系統(tǒng) 服務(wù)器配置 團(tuán)購(gòu)網(wǎng)站 阿里云 銀行業(yè)務(wù) Linux服務(wù)器 電子圍欄

本文實(shí)例講述了Java Web開(kāi)發(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ī)碼畫(huà)到內(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;icode_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ì)象,然后使用畫(huà)圖對(duì)象畫(huà)圖。下面是參考代碼:

// 創(chuàng)建內(nèi)存圖片,參數(shù)為圖片的大小以及類型
BufferedImage image = new  BufferedImage(49,14,BufferedImage.TYPE_INT_RGB);
// 得到Graphics句柄
Graphics  g = image.getGraphics();
// 設(shè)置畫(huà)筆顏色
// g.setColor(Color.yellow);
// 畫(huà)背景
g.fillRect(0,1,49,12);
1.5 把隨機(jī)碼顯示在圖片上
參考下面的代碼:
// 設(shè)置字體色
g.setColor(Color.black);
// 畫(huà)驗(yàn)證碼
g.drawString(checkcode.toString(),4,11);
// 圖象生效
g.dispose();

1.6 把生成的圖片發(fā)送到客戶端

參考代碼如下:

復(fù)制代碼 代碼如下:
ImageIO.write(image, "JPEG", response.getOutputStream());

這樣就完成了動(dòng)態(tài)圖形驗(yàn)證碼的生成。

2、在頁(yè)面中使用圖形碼:

與使用其它圖形的方式相同,使用img src="…">標(biāo)簽。假設(shè)生成圖片的Servlet的url-pattern值為checkcode,則在頁(yè)面中加載圖片的代碼如下:

復(fù)制代碼 代碼如下:
img border=0 src="checkcode">

3、驗(yàn)證

獲取用戶輸入的驗(yàn)證碼,然后從session中獲取保存的驗(yàn)證碼,對(duì)比來(lái)確定是否相同,從而完成驗(yàn)證。

希望本文所述對(duì)大家的JSP程序設(shè)計(jì)有所幫助。

您可能感興趣的文章:
  • java web開(kāi)發(fā)之servlet圖形驗(yàn)證碼功能的實(shí)現(xiàn)
  • java圖形驗(yàn)證碼生成工具類 web頁(yè)面校驗(yàn)驗(yàn)證碼
  • Java生成圖形驗(yàn)證碼工具類
  • 關(guān)于java 圖形驗(yàn)證碼的解決方法
  • Java實(shí)現(xiàn)EasyCaptcha圖形驗(yàn)證碼的具體使用

標(biāo)簽:江蘇 萍鄉(xiāng) 大理 棗莊 衢州 衡水 廣元 蚌埠

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Java Web開(kāi)發(fā)之圖形驗(yàn)證碼的生成與使用方法》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    浙江省| 格尔木市| 沅江市| 三原县| 迭部县| 湟源县| 垫江县| 措美县| 三门峡市| 九江县| 密云县| 秦皇岛市| 星座| 南宁市| 台中县| 潜山县| 兴海县| 梓潼县| 兴隆县| 宝应县| 丰县| 昌乐县| 莱州市| 上杭县| 三台县| 蓬溪县| 来凤县| 扶沟县| 安乡县| 原阳县| 慈溪市| 文安县| 石屏县| 吉首市| 德州市| 卓尼县| 越西县| 北票市| 大新县| 新营市| 望江县|