最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

圖片驗(yàn)證碼概述及實(shí)現(xiàn)步驟

 更新時(shí)間:2017年01月09日 15:57:53   作者:小偽桑  
本文主要介紹了圖片驗(yàn)證碼概述及實(shí)現(xiàn)步驟。具有一定的參考價(jià)值,下面跟著小編一起來看下吧

一. 圖片驗(yàn)證碼概述:

很多網(wǎng)站都有該實(shí)現(xiàn)

作用:

為了提高系統(tǒng)的安全性

有了驗(yàn)證碼,我們就可以要求用戶在輸入用戶名,密碼等信息后,同時(shí)輸入圖片上的文字,用戶提交后,系統(tǒng)會(huì)首先從session中提取剛剛生成的驗(yàn)證碼,并和用戶輸入的驗(yàn)證碼進(jìn)行比較,如果比較相等,表示用戶是從登錄界面登錄過來的,否則,表示用戶是非法的,我們使用驗(yàn)證碼,是確保系統(tǒng)的使用必須要進(jìn)行登錄成功之后,才能使用,避免用戶直接在地址欄中輸入要訪問的頁面。

也就是說,使用驗(yàn)證碼,就強(qiáng)制用戶用戶必須先從登錄界面登錄

. 驗(yàn)證實(shí)現(xiàn)方式

用到兩個(gè)關(guān)鍵類,這兩個(gè)類跟圖片的輸出是有關(guān)系的

BufferedImage im = new BufferedImage(60,20,BufferedImage.TYPE_INT_RGB);
//第一個(gè)參數(shù)im表示一個(gè)圖片對(duì)象
//JPG表示圖片輸出類型
//response.getOutputStream()代表一個(gè)響應(yīng)的輸出流,也就是說,你訪問這個(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表示圖片輸出類型
//response.getOutputStream()代表一個(gè)響應(yīng)的輸出流,也就是說,你訪問這個(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("華文隸書",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àn)證碼:

<img alt="驗(yàn)證碼" src="/ImageServlet">

8.保存數(shù)字,以便進(jìn)行登錄比較

//將得到的四個(gè)數(shù)字保存到session中,以便當(dāng)用戶登錄的時(shí)候,用來比較
request.getSession().setAttribute("piccode", sbf.toString());

9.登錄驗(yàn)證

首先,需要驗(yàn)證該用戶在數(shù)據(jù)庫中是否存在,如果存在,還需要驗(yàn)證輸入的驗(yàn)證碼是否一致.

驗(yàn)證成功后,需要轉(zhuǎn)發(fā)到相關(guān)的操作頁面.

代碼實(shí)例:

boolean b_exist = login.validate(username,passwd);
//如果該用戶存在
if(b_exist){
 String pic = ""+request.getSession().getAttribute("piccode");
 //比較驗(yàn)證碼
 if(!pic.equals("") && pic.equals(code)){
 //向session中存入用戶信息,以供其他中來使用
 request.getSession().setAttribute("username", username);
 
 response.sendRedirect("index.jsp");
 }
}

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!

相關(guān)文章

  • SpringBoot中AOP的動(dòng)態(tài)匹配和靜態(tài)匹配詳解

    SpringBoot中AOP的動(dòng)態(tài)匹配和靜態(tài)匹配詳解

    這篇文章主要介紹了SpringBoot中AOP的動(dòng)態(tài)匹配和靜態(tài)匹配詳解,在創(chuàng)建代理的時(shí)候?qū)δ繕?biāo)類的每個(gè)連接點(diǎn)使用靜態(tài)切點(diǎn)檢查,如果僅通過靜態(tài)切點(diǎn)檢查就可以知道連接點(diǎn)是不匹配的,則在運(yùn)行時(shí)就不再進(jìn)行動(dòng)態(tài)檢查了,需要的朋友可以參考下
    2023-09-09
  • Java 繼承方法實(shí)例詳解

    Java 繼承方法實(shí)例詳解

    這篇文章主要介紹了Java繼承中方法實(shí)例,非常的實(shí)用,這里推薦給大家,有需要的小伙伴可以參考下
    2017-04-04
  • Spring?createBeanInstance實(shí)例化Bean

    Spring?createBeanInstance實(shí)例化Bean

    這篇文章主要為大家介紹了Spring?createBeanInstance實(shí)例化Bean源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • idea指定啟動(dòng)參數(shù)、環(huán)境變量的過程

    idea指定啟動(dòng)參數(shù)、環(huán)境變量的過程

    這篇文章主要介紹了idea指定啟動(dòng)參數(shù)、環(huán)境變量的操作過程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • java搭建ftp/sftp進(jìn)行數(shù)據(jù)傳遞的全過程

    java搭建ftp/sftp進(jìn)行數(shù)據(jù)傳遞的全過程

    ftp是一種文件傳輸協(xié)議,讓客戶端和服務(wù)端能夠互相傳遞文件,圖片等數(shù)據(jù),sftp也是一種文件傳輸協(xié)議,但是相比較而言要比ftp安全性更好些,但是也有缺點(diǎn)就是傳輸效率低
    2021-07-07
  • 實(shí)例講解JAVA設(shè)計(jì)模式之備忘錄模式

    實(shí)例講解JAVA設(shè)計(jì)模式之備忘錄模式

    這篇文章主要介紹了JAVA設(shè)計(jì)模式之備忘錄模式的的相關(guān)資料,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • 解決CollectionUtils.isNotEmpty()不存在的問題

    解決CollectionUtils.isNotEmpty()不存在的問題

    這篇文章主要介紹了解決CollectionUtils.isNotEmpty()不存在的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Mybatis中TypeHandler使用小結(jié)

    Mybatis中TypeHandler使用小結(jié)

    MyBatis的TypeHandler是一個(gè)強(qiáng)大的機(jī)制,它為我們提供了一種靈活的方式來處理Java類型與數(shù)據(jù)庫類型之間的轉(zhuǎn)換,本文主要介紹了Mybatis中TypeHandler使用小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • Java并發(fā)Futures和Callables類實(shí)例詳解

    Java并發(fā)Futures和Callables類實(shí)例詳解

    Callable對(duì)象返回Future對(duì)象,該對(duì)象提供監(jiān)視線程執(zhí)行的任務(wù)進(jìn)度的方法, Future對(duì)象可用于檢查Callable的狀態(tài),然后線程完成后從Callable中檢索結(jié)果,這篇文章給大家介紹Java并發(fā)Futures和Callables類的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2024-05-05
  • Springboot報(bào)錯(cuò)java.lang.NullPointerException: null問題

    Springboot報(bào)錯(cuò)java.lang.NullPointerException: null問題

    這篇文章主要介紹了Springboot報(bào)錯(cuò)java.lang.NullPointerException: null問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11

最新評(píng)論

大关县| 手游| 治多县| 双桥区| 桂阳县| 芜湖市| 太原市| 通许县| 澄江县| 金湖县| 昌宁县| 西贡区| 庆云县| 新兴县| 剑河县| 黑水县| 扶风县| 西盟| 金华市| 江陵县| 周宁县| 天全县| 怀化市| 内乡县| 玉环县| 镇江市| 绵阳市| 宁明县| 衢州市| 迁西县| 东兰县| 湘乡市| 临湘市| 靖宇县| 江孜县| 新丰县| 新昌县| 左贡县| 文成县| 齐河县| 息烽县|