圖片驗(yàn)證碼概述及實(shí)現(xiàn)步驟
一. 圖片驗(yàn)證碼概述:
很多網(wǎng)站都有該實(shí)現(xiàn)
作用:
為了提高系統(tǒng)的安全性
有了驗(yàn)證碼,我們就可以要求用戶(hù)在輸入用戶(hù)名,密碼等信息后,同時(shí)輸入圖片上的文字,用戶(hù)提交后,系統(tǒng)會(huì)首先從session中提取剛剛生成的驗(yàn)證碼,并和用戶(hù)輸入的驗(yàn)證碼進(jìn)行比較,如果比較相等,表示用戶(hù)是從登錄界面登錄過(guò)來(lái)的,否則,表示用戶(hù)是非法的,我們使用驗(yàn)證碼,是確保系統(tǒng)的使用必須要進(jìn)行登錄成功之后,才能使用,避免用戶(hù)直接在地址欄中輸入要訪問(wèn)的頁(yè)面。
也就是說(shuō),使用驗(yàn)證碼,就強(qiáng)制用戶(hù)用戶(hù)必須先從登錄界面登錄
二. 驗(yàn)證實(shí)現(xiàn)方式
用到兩個(gè)關(guān)鍵類(lèi),這兩個(gè)類(lèi)跟圖片的輸出是有關(guān)系的
BufferedImage im = new BufferedImage(60,20,BufferedImage.TYPE_INT_RGB); //第一個(gè)參數(shù)im表示一個(gè)圖片對(duì)象 //JPG表示圖片輸出類(lèi)型 //response.getOutputStream()代表一個(gè)響應(yīng)的輸出流,也就是說(shuō),你訪問(wèn)這個(gè)servlet.該servlet就會(huì)圖片顯示給你 ImageIO.write(im, "JPG",response.getOutputStream());
三. 實(shí)現(xiàn)步驟
1.使用BufferedImage產(chǎn)生一個(gè)圖片,然后使用ImageIO輸出,并指定為JPG格式
BufferedImage im = new BufferedImage(60,20,BufferedImage.TYPE_INT_RGB); //第一個(gè)參數(shù)im表示一個(gè)圖片對(duì)象 //JPG表示圖片輸出類(lèi)型 //response.getOutputStream()代表一個(gè)響應(yīng)的輸出流,也就是說(shuō),你訪問(wèn)這個(gè)servlet.該servlet就會(huì)圖片顯示給你 ImageIO.write(im, "JPG",response.getOutputStream());
2.獲取圖片繪圖對(duì)象
Graphics g = im.getGraphics();
3.填充繪圖區(qū)域
Random rm = new Random(); Color c = new Color(rm.nextInt(255),rm.nextInt(255),rm.nextInt(255)); g.setColor(c); //填充整個(gè)圖片的顏色 g.fillRect(0, 0, 60, 20);
4.向圖片中輸出數(shù)字
g.setColor(new Color(rm.nextInt(255),rm.nextInt(255),rm.nextInt(255))); g.setFont(new Font("華文隸書(shū)",Font.BOLD|Font.ITALIC,28)); g.drawString("8", 1, 18);
5.隨機(jī)4位數(shù)字
//隨機(jī)產(chǎn)生4位數(shù)字 for(int i=0;i<4;i++){ g.setColor(new Color(rm.nextInt(255),rm.nextInt(255),rm.nextInt(255))); g.setFont(new Font("Gungsuh",Font.BOLD|Font.ITALIC,22)); g.drawString(""+rm.nextInt(10), (i*15)+2, 18); }
6.隨機(jī)產(chǎn)生中文
String str = "胸有激雷而面如平湖者可拜上將軍"; for(int i=0;i<4;i++){ g.setColor(new Color(rm.nextInt(255),rm.nextInt(255),rm.nextInt(255))); g.setFont(new Font("Gungsuh",Font.BOLD|Font.ITALIC,15)); g.drawString(""+str.charAt(rm.nextInt(str.length())), (i*15)+2, 18); }
7.在頁(yè)面中如何來(lái)引入該驗(yàn)證碼:
<img alt="驗(yàn)證碼" src="/ImageServlet">
8.保存數(shù)字,以便進(jìn)行登錄比較
//將得到的四個(gè)數(shù)字保存到session中,以便當(dāng)用戶(hù)登錄的時(shí)候,用來(lái)比較 request.getSession().setAttribute("piccode", sbf.toString());
9.登錄驗(yàn)證
首先,需要驗(yàn)證該用戶(hù)在數(shù)據(jù)庫(kù)中是否存在,如果存在,還需要驗(yàn)證輸入的驗(yàn)證碼是否一致.
驗(yàn)證成功后,需要轉(zhuǎn)發(fā)到相關(guān)的操作頁(yè)面.
代碼實(shí)例:
boolean b_exist = login.validate(username,passwd); //如果該用戶(hù)存在 if(b_exist){ String pic = ""+request.getSession().getAttribute("piccode"); //比較驗(yàn)證碼 if(!pic.equals("") && pic.equals(code)){ //向session中存入用戶(hù)信息,以供其他中來(lái)使用 request.getSession().setAttribute("username", username); response.sendRedirect("index.jsp"); } }
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持腳本之家!
- Java實(shí)現(xiàn)圖片驗(yàn)證碼具體代碼
- java圖片驗(yàn)證碼生成教程詳解
- java web中圖片驗(yàn)證碼功能的簡(jiǎn)單實(shí)現(xiàn)方法
- Javaweb開(kāi)發(fā)中通過(guò)Servlet生成驗(yàn)證碼圖片
- java生成圖片驗(yàn)證碼實(shí)例代碼
- Java仿12306圖片驗(yàn)證碼
- Java實(shí)現(xiàn)驗(yàn)證碼具體代碼(圖片、漢字)
- java圖片驗(yàn)證碼實(shí)現(xiàn)示例分享
- java生成圖片驗(yàn)證碼示例程序
- java 圖片驗(yàn)證碼的實(shí)現(xiàn)代碼
相關(guān)文章
Java基于JDBC實(shí)現(xiàn)事務(wù),銀行轉(zhuǎn)賬及貨物進(jìn)出庫(kù)功能示例
這篇文章主要介紹了Java基于JDBC實(shí)現(xiàn)事務(wù),銀行轉(zhuǎn)賬及貨物進(jìn)出庫(kù)功能,較為詳細(xì)的分析了事務(wù)操作的原理、實(shí)現(xiàn)方法及java基于jdbc連接數(shù)據(jù)庫(kù)實(shí)現(xiàn)銀行事務(wù)操作的相關(guān)技巧,需要的朋友可以參考下2017-12-12java簡(jiǎn)單實(shí)現(xiàn)復(fù)制 粘貼 剪切功能代碼分享
本文給大家分享了一段java編寫(xiě)的簡(jiǎn)單實(shí)現(xiàn)復(fù)制粘貼剪切功能的代碼,需要的小伙伴可以直接拿走使用。如有更好的方案,也可以告之本人。2014-11-11spring-boot-maven-plugin未指定版本導(dǎo)致的編譯錯(cuò)誤問(wèn)題
這篇文章主要介紹了spring-boot-maven-plugin未指定版本導(dǎo)致的編譯錯(cuò)誤問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04