国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - javaWeb如何實現隨機圖片驗證碼詳解

javaWeb如何實現隨機圖片驗證碼詳解

2021-08-30 11:06C--++ Java教程

這篇文章主要給大家介紹了關于javaWeb如何實現隨機圖片驗證碼的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

實現步驟

1:java后臺生成一張隨機數字/字母/漢字驗證碼的圖片。

2:存入redis或者session。

3:用戶輸入驗證碼跟redis取出數據做比對。

圖片生成工具類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
public class randomvalidatecodeutil {
 
 
 public static final string randomcodekey = "randomvalidatecodekey";//放到session中的key
 private string randstring = "0123456789";//隨機產生只有數字的字符串 private string
 //private string randstring = "abcdefghijklmnopqrstuvwxyz";//隨機產生只有字母的字符串
 //private string randstring = "0123456789abcdefghijklmnopqrstuvwxyz";//隨機產生數字與字母組合的字符串
 private int width = 95;// 圖片寬
 private int height = 25;// 圖片高
 private int linesize = 40;// 干擾線數量
 private int stringnum = 4;// 隨機產生字符數量
 
 private static final logger logger = loggerfactory.getlogger(randomvalidatecodeutil.class);
 
 private random random = new random();
 
 /**
  * 獲得字體
  */
 private font getfont() {
  return new font("fixedsys", font.center_baseline, 18);
 }
 
 /**
  * 獲得顏色
  */
 private color getrandcolor(int fc, int bc) {
  if (fc > 255) {
   fc = 255;
  }
  if (bc > 255) {
   bc = 255;
  }
  int r = fc + random.nextint(bc - fc - 16);
  int g = fc + random.nextint(bc - fc - 14);
  int b = fc + random.nextint(bc - fc - 18);
  return new color(r, g, b);
 }
 
 /**
  * 生成隨機圖片
  */
 public string getrandcode(httpservletrequest request, httpservletresponse response) {
  httpsession session = request.getsession();
  // bufferedimage類是具有緩沖區的image類,image類是用于描述圖像信息的類
  bufferedimage image = new bufferedimage(width, height, bufferedimage.type_int_bgr);
  graphics g = image.getgraphics();// 產生image對象的graphics對象,改對象可以在圖像上進行各種繪制操作
  g.fillrect(0, 0, width, height);//圖片大小
  g.setfont(new font("default", font.roman_baseline, 18));//字體大小
  g.setcolor(getrandcolor(110, 133));//字體顏色
  // 繪制干擾線
  for (int i = 0; i <= linesize; i++) {
   drowline(g);
  }
  // 繪制隨機字符
  string randomstring = "";
  for (int i = 1; i <= stringnum; i++) {
   randomstring = drowstring(g, randomstring, i);
  }
  logger.info(randomstring);
  g.dispose();
  try {
   // 將內存中的圖片通過流動形式輸出到客戶端
   imageio.write(image, "jpeg", response.getoutputstream());
  } catch (exception e) {
   logger.error("將內存中的圖片通過流動形式輸出到客戶端失敗>>>> ", e);
  }
  return randomstring;
 }
 
 /**
  * 繪制字符串
  */
 private string drowstring(graphics g, string randomstring, int i) {
  g.setfont(getfont());
  g.setcolor(new color(random.nextint(101), random.nextint(111), random
    .nextint(121)));
  string rand = string.valueof(getrandomstring(random.nextint(randstring
    .length())));
  randomstring += rand;
  g.translate(random.nextint(3), random.nextint(3));
  g.drawstring(rand, 13 * i, 16);
  return randomstring;
 }
 
 /**
  * 繪制干擾線
  */
 private void drowline(graphics g) {
  int x = random.nextint(width);
  int y = random.nextint(height);
  int xl = random.nextint(13);
  int yl = random.nextint(15);
  g.drawline(x, y, x + xl, y + yl);
 }
 
 /**
  * 獲取隨機的字符
  */
 public string getrandomstring(int num) {
  return string.valueof(randstring.charat(num));
 }
}

使用工具類生成

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@getmapping(value = "/getverify")
@apioperation("生成圖片驗證碼")
public void getverify(httpservletrequest request, httpservletresponse response) {
 try {
  //設置相應類型,告訴瀏覽器輸出的內容為圖片
  response.setcontenttype("image/jpeg");
  //設置響應頭信息,告訴瀏覽器不要緩存此內容
  response.setheader("pragma", "no-cache");
  response.setheader("cache-control", "no-cache");
  response.setdateheader("expire", 0);
  randomvalidatecodeutil randomvalidatecode = new randomvalidatecodeutil();
  //輸出驗證碼圖片方法
  string randcode = randomvalidatecode.getrandcode(request, response);
  
  // 將隨機生成的字符串放在redis中
  redisutil.save("random", randcode);
  
  // 將生成的隨機字符串保存到session中
  // httpsession session = request.getsession();
  // session.removeattribute(randomcodekey);
  // session.setattribute(randomcodekey, randomstring);
 
 } catch (exception e) {
  log.error("獲取驗證碼失敗>>>> ", e);
 }
}

當有請求進來時

1:告訴瀏覽器如何接收圖片。

2:使用工具類生成圖片 。

3:將驗證碼存入redis或者seesion。

4:調用成功圖片已流給瀏覽器

獲得圖片:

javaWeb如何實現隨機圖片驗證碼詳解

校驗圖形驗證碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@postmapping("/checkverify")
  @apioperation("校驗圖形驗證碼")
  public string checkvalidatecode(string verify) {
    // 校驗驗證碼
    try {
      // 從redis中獲取驗證碼
      string random = (string) redisutil.findkey("random");
 
      // 從ression中獲取驗證碼
      httpsession session = request.getsession();
      string random = session.getattribute("random");
 
      log.info("獲取的隨機數 random = {}", random);
      if (org.springframework.util.stringutils.isempty(verify)) {
        return "沒有輸入驗證碼";
      }
      if (verify.equals(random)) {
        redisutil.delkey("random");
      } else {
        return "驗證碼錯誤";
      }
    } catch (exception e) {
      log.error("驗證碼校驗失敗", e);
      return "服務器異常";
    }
    return "成功";
  }

驗證:從redis或者seesion取出存入的驗證碼與用戶輸入的比對,相同驗證成功,反之驗證失敗。

總結

到此這篇關于javaweb如何實現隨機圖片驗證碼的文章就介紹到這了,更多相關javaweb隨機圖片驗證碼內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/jhoeeee/article/details/115234218

延伸 · 閱讀

精彩推薦
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7472021-02-04
主站蜘蛛池模板: 欧美在线观看一区 | 特黄特色大片免费视频观看 | 久久成| 久久小草 | 久久91精品国产 | 亚洲欧美v国产一区二区 | 久久视频热 | 美女视频一区二区三区 | 日韩福利| 在线一区二区三区做爰视频网站 | 黄色一级片 | 日本久久精品视频 | 欧美日韩精品一区二区三区 | 国产小视频自拍 | 精品欧美乱码久久久久久1区2区 | 午夜视频导航 | julia一区二区中文久久94 | 一区亚洲 | 成人日韩在线观看 | 亚洲成人一区在线观看 | 久久99精品久久久久蜜臀 | 欧美国产精品一区二区三区 | 中文字幕成人网 | 蜜桃臀一区二区三区 | 国产亚洲精品美女久久久久久久久久 | 97av在线 | 深夜福利影院 | 欧美视频精品在线观看 | 亚洲黄色成人 | 日韩欧美视频一区 | 亚洲xxxx3d | 国产激情网址 | 日韩欧美综合 | 色婷婷av一区二区三区大白胸 | 久久久成人免费一区二区 | 欧美爱爱视频 | 高清一区二区三区 | 亚洲一区在线观看视频 | 国产在线中文字幕 | 欧美区在线 | 成人爽a毛片一区二区免费 久久久久亚洲精品 |