激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - 圖片驗(yàn)證碼概述及實(shí)現(xiàn)步驟

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

2020-07-24 13:44小偽桑 Java教程

本文主要介紹了圖片驗(yàn)證碼概述及實(shí)現(xiàn)步驟。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧

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

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

作用:

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

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

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

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

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

?
1
2
3
4
5
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格式

?
1
2
3
4
5
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ū)域

?
1
2
3
4
5
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ù)字

?
1
2
3
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ù)字

?
1
2
3
4
5
6
//隨機(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)生中文

?
1
2
3
4
5
6
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)證碼:

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

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

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

9.登錄驗(yàn)證

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

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

代碼實(shí)例:

?
1
2
3
4
5
6
7
8
9
10
11
12
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中存入用戶信息,以供其他中來(lái)使用
 request.getSession().setAttribute("username", username);
 
 response.sendRedirect("index.jsp");
 }
}

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

原文鏈接:http://www.cnblogs.com/liu321kai/p/6257131.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产免费久久久久 | 天天草夜夜爽 | 国产亚洲精品久久久久婷婷瑜伽 | 色七七网站| 99亚洲精品 | 久久久av亚洲男天堂 | 粉嫩蜜桃麻豆免费大片 | 免费视频99 | 欧美精品久久天天躁 | 精品成人av一区二区三区 | 99精品视频在线观看免费 | 国产精品久久久久av | 日韩视频区 | 国产一区二区不卡视频 | 欧美精品国产综合久久 | 九九热免费视频在线观看 | 亚洲综合一区二区三区 | 免费嗨片首页中文字幕 | 日韩精品中文字幕一区二区三区 | 91香草视频 | 国产免费激情视频 | 天堂精品久久 | 亚洲黑人在线观看 | 国产二区三区在线播放 | 九色一区二区 | 国产精品亚洲欧美 | 成人激情综合网 | 免费观看9x视频网站在线观看 | 99国产精成人午夜视频一区二区 | 国产日韩一区二区三区在线观看 | 中文字幕国 | 欧美黄色一级片在线观看 | 羞羞羞羞视频 | 91网站链接 | 国产精品视频一区二区三区综合 | 91成人一区二区三区 | 日日操夜夜透 | 欧美黄在线 | 免费午夜视频在线观看 | 日韩精品一区二区在线 | 色天使中文字幕 |