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

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

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

服務器之家 - 編程語言 - JAVA教程 - 淺析Java驗證碼生成庫JCaptcha

淺析Java驗證碼生成庫JCaptcha

2020-06-01 13:28333ks JAVA教程

JCaptcha 是一個用來生成驗證碼的開源Java類庫,使用起來也是非常的簡單方便。本文通過代碼實例介紹了JCaptcha類庫。

JCaptcha是非常強大的,不光是可以生成圖片式的驗證碼,還可以生成聲音式的(新浪就使用了雙重驗證碼)。本文簡單的介紹了JCaptcha庫以及使用實例,下面一起來看看。

下載JCaptcha庫

maven依賴如此添加:

?
1
2
3
4
5
<dependency>
      <groupId>com.octo.captcha</groupId>
      <artifactId>jcaptcha</artifactId>
      <version>1.0</version>
    </dependency>

封裝了一個簡單的類

?
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
import com.octo.captcha.component.image.backgroundgenerator.BackgroundGenerator;
import com.octo.captcha.component.image.backgroundgenerator.FileReaderRandomBackgroundGenerator;
import com.octo.captcha.component.image.color.RandomListColorGenerator;
import com.octo.captcha.component.image.fontgenerator.FontGenerator;
import com.octo.captcha.component.image.fontgenerator.RandomFontGenerator;
import com.octo.captcha.component.image.textpaster.DecoratedRandomTextPaster;
import com.octo.captcha.component.image.textpaster.TextPaster;
import com.octo.captcha.component.image.textpaster.textdecorator.TextDecorator;
import com.octo.captcha.component.image.wordtoimage.ComposedWordToImage;
import com.octo.captcha.component.image.wordtoimage.WordToImage;
import com.octo.captcha.component.word.wordgenerator.RandomWordGenerator;
import com.octo.captcha.component.word.wordgenerator.WordGenerator;
import com.octo.captcha.engine.CaptchaEngine;
import com.octo.captcha.engine.image.ListImageCaptchaEngine;
import com.octo.captcha.image.gimpy.GimpyFactory;
 
import java.awt.*;
 
/**
 * 產(chǎn)生驗證碼圖片的類
 */
public class CapchaHelper {
  private static final Integer MIN_WORD_LENGTH = 4;// 驗證碼最小長度
  private static final Integer MAX_WORD_LENGTH = 4;// 驗證碼最大長度
  private static final Integer IMAGE_HEIGHT = 30;// 驗證碼圖片高度
  private static final Integer IMAGE_WIDTH = 130;// 驗證碼圖片寬度
  private static final Integer MIN_FONT_SIZE = 15;// 驗證碼最小字體
  private static final Integer MAX_FONT_SIZE = 15;// 驗證碼最大字體
  private static final String RANDOM_WORD = "0123456789";// 隨機字符
 
  // 驗證碼隨機字體
  private static final Font[] RANDOM_FONT = new Font[]{
      new Font("nyala", Font.BOLD, MIN_FONT_SIZE),
      new Font("Arial", Font.BOLD, MIN_FONT_SIZE),
      new Font("Bell MT", Font.BOLD, MIN_FONT_SIZE),
      new Font("Credit valley", Font.BOLD, MIN_FONT_SIZE),
      new Font("Impact", Font.BOLD, MIN_FONT_SIZE)
  };
 
  // 驗證碼隨機顏色
  private static final Color[] RANDOM_COLOR = new Color[]{
      new Color(255, 255, 255),
      new Color(255, 220, 220),
      new Color(220, 255, 255),
      new Color(220, 220, 255),
      new Color(255, 255, 220),
      new Color(220, 255, 220)
  };
 
  private static ListImageCaptchaEngine captchaEngine;
 
  public static CaptchaEngine getCaptchaEngine(final String imgPath) {
    if (captchaEngine == null) {
      synchronized (CapchaHelper.class) {
        if (captchaEngine == null && imgPath != null) {
          captchaEngine = new ListImageCaptchaEngine() {
            @Override
            protected void buildInitialFactories() {
              RandomListColorGenerator randomListColorGenerator = new RandomListColorGenerator(RANDOM_COLOR);
              BackgroundGenerator backgroundGenerator = new FileReaderRandomBackgroundGenerator(IMAGE_WIDTH, IMAGE_HEIGHT, imgPath);
              WordGenerator wordGenerator = new RandomWordGenerator(RANDOM_WORD);
              FontGenerator fontGenerator = new RandomFontGenerator(MIN_FONT_SIZE, MAX_FONT_SIZE, RANDOM_FONT);
              TextDecorator[] textDecorator = new TextDecorator[]{};
              TextPaster textPaster = new DecoratedRandomTextPaster(MIN_WORD_LENGTH, MAX_WORD_LENGTH, randomListColorGenerator, textDecorator);
              WordToImage wordToImage = new ComposedWordToImage(fontGenerator, backgroundGenerator, textPaster);
              addFactory(new GimpyFactory(wordGenerator, wordToImage));
            }
          };
        }
      }
    }
    return captchaEngine;
  }
}

響應網(wǎng)頁中對驗正碼圖像的請求

可以定義一個servlet響應這個請求,如果用springMVC,也可以用某個Controller中的某個方法響應這個請求,不管怎樣,都需要指定一個路徑對應到servlet或controller的方法,比如路徑是:”/aaa/captcha”

那么在響應對這個路徑的請求的Servlet中可以這樣寫:

?
1
2
3
4
5
6
7
8
9
10
11
//獲取驗證碼背景圖片的路徑,這路徑放了很多作為背景的圖像
    String captcha_backgrounds = session.getServletContext().getRealPath("/WEB-INF/img/captcha");
    CaptchaEngine ce = CapchaHelper.getCaptchaEngine(captcha_backgrounds);
    //需要admin網(wǎng)頁中用js定時從服務端獲取當前的驗證碼
    Captcha captcha = ce.getNextCaptcha();
    //為了驗證,把captcha對象放到session中,以在客戶端提交驗證碼時進行驗證
    req.getSession().setAttribute("captcha", captcha);
    //獲取驗證碼圖片,這是未壓縮的位圖
    BufferedImage image = (BufferedImage) captcha.getChallenge();
    resp.setContentType("image/jpeg");
    ImageIO.write(image, "jpg", resp.getOutputStream());

如果用springMVC,就這樣寫:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
//獲取驗證碼背景圖片的路徑,這路徑放了很多作為背景的圖像
    String captcha_backgrounds = session.getServletContext().getRealPath("/WEB-INF/img/captcha");
    CaptchaEngine ce = CapchaHelper.getCaptchaEngine(captcha_backgrounds);
    //需要admin網(wǎng)頁中用js定時從服務端獲取當前的驗證碼
    Captcha captcha = ce.getNextCaptcha();
    //為了驗證,把captcha對象放到session中,以在客戶端提交驗證碼時進行驗證
    session.setAttribute("captcha", captcha);
    //獲取驗證碼圖片,這是未壓縮的位圖
    BufferedImage image = (BufferedImage) captcha.getChallenge();
    ByteArrayOutputStream bao=new ByteArrayOutputStream();
    //應縮成jpg并寫到輸出流中
    ImageIO.write(image, "jpg", bao);
    return bao.toByteArray();

這兩種方式,向客戶端返回的都是二進制數(shù)據(jù)。

String captcha_backgrounds = session.getServletContext().getRealPath(“/WEB-INF/img/captcha”);

表示路徑/WEB-INF/img/captcha下面放的是作為驗證碼圖像的背景的多張圖片,必須是jpeg,大小可能沒限制,你可以自己試一下。

網(wǎng)頁中用 <IMG> 指向這個地址

?
1
<img id="captcha" src="/captcha_img" onclick="refreshCaptchaImg()" />

js函數(shù)refreshCaptchaImg()響應圖片的點擊,每點擊一次,就重新獲取一張新的驗證碼圖片。如何重新獲取驗正碼圖片呢?

只需改變img的src屬性,但這里是每次都是用同一個地址來設置這個屬性,這樣不會引起真正的刷新,所以方法refreshCaptchaImg()是這樣實現(xiàn)的:

?
1
2
3
4
5
function refreshCaptchaImg() {
      //從服務端重新下載驗證碼圖片
      //給這個地加參數(shù)純?yōu)榱藦娭扑⑿拢駝t由于src指向的url地址沒變,瀏覽器不會真正生刷新圖片
      var now = new Date()
      $("#captcha").attr("src","/captcha_img?"+now.getTime());

以上就是Java中驗證碼生成庫JCaptcha的介紹及使用,希望對大家學習java有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 黑人同学征服教师麻麻 | 第一次做m被调教经历 | 嫩草影院精品视频在线观看 | 999精品视频在线观看 | 亚洲va欧美va国产va天堂影 | 九九久久国产精品免费热6 九九精品视频一区二区三区 | 日韩无遮挡大尺度啪啪影片 | 久久精品视频uu | 久久婷婷五月综合色精品首页 | 国产成人福利免费观看 | 免费理伦片手机在线播放 | 美国玩尿眼道videos | 激情综合站 | 学校捏奶揉下面污文h | 青青成人 | 日本免费一二区 | 日日操日日 | 成人在线播放 | 国产v在线在线观看羞羞答答 | 国产黄频在线观看 | 日本视频在线免费看 | 非洲黑人bbwbbwbbw | 四虎官网 | 四虎影音 | 成人精品一区二区三区 | 精东影业传媒全部作品 | 久久久久久久久a免费 | 日本mature乱子视频 | lubuntu网页版在线 | 视频免费视频观看网站 | aaa一级特黄 | juliaann厨房大战 | 午夜国产精品影院在线观看 | 无限国产资源 | 日韩欧美综合在线二区三区 | 免费抽搐一进一出印度 | 日产乱码2021永久手机版 | 韩国男女做性全过程视频 | 91在线播 | 国产日本久久久久久久久婷婷 | 国产午夜精品久久久久 |