本文執行個體講述了Java Web開發之圖形驗證碼的產生與使用方法。分享給大家供大家參考。具體如下:
圖形驗證碼的主要目的是為了增強的安全性,增加使用者通過遍曆所有可能性來破解密碼的難度。
圖形驗證碼的使用包括如下3部分:
① 圖形驗證碼的產生;
② 在頁面中的使用;
③ 驗證;
1、圖形驗證碼的產生
假設在Servlet產生圖形驗證碼,在JavaBean或者JSP中產生的基本過程是相同的。設計如下過程:
① 設定響應的文件類型;
② 產生隨機碼;
③ 把隨機碼儲存到session中;
④ 產生圖片;
⑤ 把隨機碼畫到記憶體配置圖片上;
⑥ 把記憶體配置圖片發送到用戶端;
1.1 設定響應的文件類型
在對使用者進行響應的時候,需要設定文件類型,要產生圖片文件類型可以設定為:image/gif。
在Servlet中的設定方式為:response.setContentType("image/gif");
如果在JSP頁面中使用則需要使用:<%@ page contentType="image/gif"%>
1.2 產生隨機碼
可以根據各種隨機數建置原則來產生,並且可以設定隨機碼有哪些字元組成以及隨機碼的長度。
本文給出的隨機碼字元是所有字母和數字。使用的隨機碼建置原則使用的是Random對象提供的。參考代碼如下:
隨機碼字元列表:
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'};
產生隨機碼的代碼:
StringBuffer checkcode=new StringBuffer();// 每迴圈一次,產生一位for(int i=0;i<code_length;i++){ int generated=(new Random()).nextInt(62); checkcode.append(code[generated]);}
1.3 把隨機碼儲存到session中
為了在使用者提交驗證碼之後進行驗證,需要儲存產生的驗證碼,可以儲存在session中。在Servlet中需要先擷取session對象,然後再使用。
下面是參考代碼:
// 把產生的驗證碼儲存到session中HttpSession session=request.getSession(true);session.setAttribute("checkCode",checkcode.toString());
1.4 產生圖片
使用BufferedImage類建立對象,然後使用畫圖對象畫圖。下面是參考代碼:
// 建立記憶體配置圖片,參數為圖片的大小以及類型BufferedImage image = new BufferedImage(49,14,BufferedImage.TYPE_INT_RGB);// 得到Graphics控制代碼Graphics g = image.getGraphics();// 設定畫筆顏色// g.setColor(Color.yellow);// 畫背景g.fillRect(0,1,49,12);1.5 把隨機碼顯示在圖片上參考下面的代碼:// 設定字型色g.setColor(Color.black);// 畫驗證碼g.drawString(checkcode.toString(),4,11);// 圖象生效g.dispose();
1.6 把產生的圖片發送到用戶端
參考代碼如下:
複製代碼 代碼如下:
ImageIO.write(image, "JPEG", response.getOutputStream());
這樣就完成了動態圖形驗證碼的產生。
2、在頁面中使用圖形碼:
與使用其它圖形的方式相同,使用<img src="…">標籤。假設產生圖片的Servlet的url-pattern值為checkcode,則在頁面中載入圖片的代碼如下:
複製代碼 代碼如下:
<img border=0 src="checkcode">
3、驗證
擷取使用者輸入的驗證碼,然後從session中擷取儲存的驗證碼,對比來確定是否相同,從而完成驗證。
希望本文所述對大家的JSP程式設計有所協助。