一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 探討Java驗證碼制作(上篇)

探討Java驗證碼制作(上篇)

2020-04-29 11:48Try.Catch JAVA教程

很多朋友對驗證碼并不陌生,無論是申請賬號還是某些情況下登錄時都會要求輸入驗證碼。接下來通過本文給大家介紹java驗證碼制作的方法,感興趣的朋友一起學習吧

相信大家對驗證碼這玩意不會陌生,無論是申請賬號還是某些情況下登錄時都會要求輸入驗證碼。經過統計,驗證碼一次驗證就成功通過的概率是90%,并不高,那么很多人對于這種降低用戶體驗度的設計肯定會懷疑他的必要性,但黑格爾說過:凡是合乎理性的東西都是現實的;凡是現實的東西都是合乎理性的。接下來我們來了解一下驗證碼。

驗證碼是一種區別用戶是計算機還是人的公共全自動程序,他被用于防止惡意破解密碼、刷票、論壇灌水,防止黑客通過暴力破解方式不斷地登錄,應用于銀行、社區、論壇、投票系統等等。

廢話不多說我們來看看我已知的用Java實現驗證碼的四種方式。

方法一:

第一種方法是我最先想到的,也是實現邏輯最簡單的,但效率、安全性極其不高。

探討Java驗證碼制作(上篇)

具體操作就是:1、用photoshop制作出驗證碼圖片,矩形圖片上可有必要的英文字母、數字或中文(如上)

2、將圖片顯示在swing控件中或是jsp頁面中

3、在代碼中為每張圖片匹配上相應的驗證碼字符串

4、在提交時獲取組件或文本框中的字符串與每張圖片的字符串用equals()方法進行比較

缺憾就是制作驗證碼圖片的過程太費時,實現方法極low,極不推薦這樣實現,下面的方法將越來越高效美觀相對安全。

方法二:

這里講Java Web,Servlet下的驗證碼實現,實現起來邏輯還是很清晰的。

探討Java驗證碼制作(上篇)

省去較簡單的實現代碼,我們先從前臺關鍵代碼說起:

當我們點擊"看不清"時,驗證碼圖片會進行一個刷新,會調用一個js函數用于重新設置圖片路徑來更換圖片,請看下面代碼,代碼中<%=request.getContextPath()%>是為了解決相對路徑的問題,可返回站點的根路徑,而/servlet/ImageServlet是一個整體,指向的就是ImageServlet這個servlet,為什么要在之前加個/servlet呢,因為我們在web.xml中做了配置映射,可理解為換了個更長的名稱。接著看下面js函數,可能有些人會有疑問,為什么獲取一個當前時間然后加在路徑最后呢,其實這是為了解決瀏覽器緩存的問題,就是當觸發了ImageServlet后雖然驗證碼圖片換了但緩存還沒變顯示出來的驗證碼圖片不變的問題,借助每時每刻時間不同可以讓瀏覽器緩存失效。

?
1
2
3
4
5
6
<script type="text/javascript">
  function reloadCode(){
   var time = new Date().getTime();
   document.getElementById("imagecode").src="<%=request.getContextPath() %>/servlet/ImageServlet?d="+time;
  }
 </script>

下面是web.xml中的關鍵配置信息:

?
1
2
3
4
5
6
<script type="text/javascript">
 function reloadCode(){
  var time = new Date().getTime();
  document.getElementById("imagecode").src="<%=request.getContextPath() %>/servlet/ImageServlet?d="+time;
 }
 </script>

然后我們看關鍵的ImageServlet是怎么生成圖片的:

探討Java驗證碼制作(上篇)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<servlet>
  <servlet-name>ImageServlet</servlet-name>
  <servlet-class>com.muke.ImageServlet</servlet-class>
 </servlet>
 <servlet>
  <servlet-name>LoginServlet</servlet-name>
  <servlet-class>com.muke.LoginServlet</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>ImageServlet</servlet-name>
  <url-pattern>/servlet/ImageServlet</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
  <servlet-name>LoginServlet</servlet-name>
  <url-pattern>/servlet/LoginServlet</url-pattern>
 </servlet-mapping>

如果要更生動的描述這種驗證碼是怎么樣來實現的,那么就一個字“畫”,聽上去和第一種方法類似,還是比較low,但是用代碼來自動“畫”出驗證碼效率絕對翻了無數倍。我們來看上述代碼,首先實例化了一個BufferedImage對象bi,bi是用來畫出那張驗證碼圖片的,然后用bi得到一支畫筆g,用g畫出了實體的矩形背景,接著用簡單的邏輯通過畫筆g調用Java中常用的drawString()方法在矩形上畫出驗證碼字符,同時將字符串依次加入StringBuffer可變字符串對象中,最后存入jsp內置對象session中以便提交驗證碼后的比對,為了顯示出驗證碼,我們還需將生成驗證碼圖片以某種圖片格式寫入ImageIO流。

下面LoginServlet中可以看出,獲取剛剛ImageServlet存入session的字符串就可以進行與驗證碼提交框中字符串的比對了,可以把字符串都變為小寫或大寫做一個忽略大小寫的處理。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class ImageServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException{
 BufferedImage bi = new BufferedImage(,,BufferedImage.TYPE_INT_RGB);
 Graphics g = bi.getGraphics();
 Color c = new Color(,,);
 g.setColor(c);
 g.fillRect(, , , );
 char[] ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
 Random r = new Random();
 int len=ch.length,index;
 StringBuffer sb = new StringBuffer();
 for(int i=; i<; i++){
 index = r.nextInt(len);
 g.setColor(new Color(r.nextInt(),r.nextInt(),r.nextInt()));
 g.drawString(ch[index]+"", (i*)+, );
 sb.append(ch[index]);
 }
 request.getSession().setAttribute("piccode", sb.toString());
 ImageIO.write(bi, "JPG", response.getOutputStream());
}
}

下面是實現圖例:

探討Java驗證碼制作(上篇)探討Java驗證碼制作(上篇)

以上所述是小編給大家介紹的Java驗證碼制作的相關知識,希望對大家有所幫助!后續給大家介紹java驗證碼制作(下),感興趣的朋友敬請關注服務器之家網站!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美a级完整在线观看 | 双龙高h | 欧美亚洲视频在线观看 | 国内久久精品视频 | 国产九九| 日本国产在线视频 | 亚洲 日本 天堂 国产 在线 | 垫底辣妹免费观看完整版 | 国产精选之刘婷野战 | 91天堂国产在线 在线播放 | 激情六月丁香婷婷四房播 | 美女班主任下面好爽好湿好紧 | 99这里只有精品66视频 | 青青草国产精品久久碰 | 59日本人xxxxxxxxx69| 国产成人久久久精品一区二区三区 | 四虎国产精品免费久久麻豆 | 女仆色永久免费网站 | 1024日韩基地 | 经典千人斩一区二区视频 | 免费精品在线视频 | 国产精品久久久久影视不卡 | 亚洲视频免| 国产一区二区精品久 | 色婷婷久久综合中文久久一本` | 99精品视频在线观看免费播放 | 嫩草影院地址一地址二 | 日本福利片国产午夜久久 | 日韩影院在线观看 | 99久久精品免费精品国产 | 欧美精品一区二区三区久久 | 女学生被老师调教在教室 | 按摩椅play啊太快了h | 国产精品亚洲午夜不卡 | 亚洲国产精品自在现线让你爽 | 久久国产加勒比精品无码 | 男人使劲躁女人小视频 | 小早川怜子亚洲综合中文字幕 | 韩日视频在线 | 桃乃木香奈作品在线 | 国产福利兔女郎在线观看 |