Jcaptcha sangat kuat. Ini tidak hanya dapat menghasilkan kode verifikasi berbasis gambar, tetapi juga kode verifikasi berbasis suara (SINA menggunakan kode verifikasi dua kali lipat). Artikel ini secara singkat memperkenalkan Contoh Perpustakaan dan Penggunaan JCAPTCHA, mari kita lihat di bawah ini.
Unduh Perpustakaan JCaptcha
Ketergantungan Maven ditambahkan seperti ini:
<dependency> <GroupId> com.octo.captcha </groupid> <ArTifactId> jcaptcha </artifactid> <version> 1.0 </version> </dependency>
Merangkum kelas sederhana
Impor com.octo.captcha.component.image.backgroundgenerator.backgroundGenerator; import com.octo.captcha.component.image.backgroundgenerator.filereaderrandombackgroundGenerator; import com.octo.captcha.component.image.color.randandristca; com.octo.captcha.component.image.fontgenerator.fontgenerator; impor com.octo.captcha.conponent.image.fontgenerator.randomfontgenerator; import com.octo.captcha.component.image.textpaster.decoratedrandomtexa.captcha com.octo.captcha.component.image.textpaster.textpaster; Image com.octo.captcha.component.image.textpaster.textdecorator.textdecorator; gambar com.octo.captcha.component.image.wordtoImage.cowwordword; gambar; com.octo.captcha.component.image.wordtoimage.image.wordtoimage;image 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; impor java.awt.*;/** Kelas yang menghasilkan kode verifikasi = Capchahelper private static final {private static integer final steger = Final Minify = Capchahelper private static static static static static Integer max_word_length = 4; // panjang maksimum kode verifikasi private static static final integer image_height = 30; // kode verifikasi tinggi gambar private private static final integer image_width = 130; // Kode verifikasi Lebar gambar private final final final Min_font_size = 15;// Minimal Kode Minimal Font Static Private Min_font = 15; // Minimal Kode Minimal Font dari Staticy Static Private Min_font_size = 15;// Minimal Kode Minimal Font dari Font Font dari Stative Staticy Staticy Statice Min_font_Size = 15;// Minimal Font dari font font font font private final Min_FONT_SIZE = 15;// Minimal Font dari font font font font minimal font font private fin Kode Verifikasi Private Static Final String Random_Word = "0123456789"; // karakter acak // Font acak untuk kode verifikasi private static final font [] random_font = font baru [] {font baru ("newat", font.bold, min_font_size), font baru ("Arial", font.bold, min_font_size), font baru ("Arial", font. Font.bold, min_font_size), font baru ("credit valley", font.bold, min_font_size), font baru ("dampak", font.bold, min_font_size)}; // Kode Verifikasi Warna acak Private Static Final Color [] random_color = Warna baru [] {Warna baru (255, 255, 255), warna baru (255, 220, 220), warna baru (220, 255, 255), warna baru (220, 220, 255), warna baru (255, 255, 220), baru (220, 220, 220, 255), baru (255, 255, 220), (220, 220, 220, 255), baru (255, 255, 255, 220), baru (220), baru (255, 255, 255, 220), (220), baru (255, 255, 255, 255, 220), baru (255, 255, 255, 255, 255, 255, 255, 255, 220, 255, 255, 220, 255, 220, 255, 255, 255, 255, private static listimageCaptchaengine captchaengine; public static captchaengine getCaptchaengine (string final imgpath) {if (captchaengine == null) {disinkronkan (capchahelper.class) {if (captchaengine == null && imgpath! = null) {capTchaEngine = baru lokimageCaptchaEndorory (null) {captchaengine = baru lokimageCaptchaEndorpath (null) {captchaengine = baru lokimageCaptchaCine (null) {captchaEngine = baru locimagecaptchaCine (null) {captchaengine (captchaEngine) baru baru lokusapapap RandomListColorgenerator RandomListColorgenerator = New RandomListColorgenerator (Random_Color); Latar belakanggenerator latar belakanggenerator = filereaderrandombackgroundgenerator baru (image_width, image_height, imgpath); Wordgenerator wordgenerator = new randomWordGenerator (random_word); Fontgenerator fontgenerator = randomfontgenerator baru (min_font_size, max_font_size, random_font); TextDecorator [] textDecorator = TextDecorator baru [] {}; Textpaster textpaster = new DecoratedRandomTextPaster (min_word_length, max_word_length, randomListColorgenerator, textDecorator); WordtoImage wordtoImage = new composedwordtoImage (fontgenerator, latar belakang, tekspaster); addFactory (GimpyFactory baru (WordGenerator, WordoImage)); }}; }}} return captchaengine; }}Menanggapi permintaan gambar kode yang benar di halaman web
Anda dapat mendefinisikan servlet untuk menanggapi permintaan ini. Jika Anda menggunakan springMVC , Anda juga dapat menggunakan metode dalam Controller untuk menanggapi permintaan ini. Bagaimanapun, Anda perlu menentukan metode yang sesuai dengan servlet或controller , seperti jalurnya adalah :”/aaa/captcha”
Kemudian di servlet yang menanggapi permintaan jalur ini, Anda dapat menulisnya seperti ini:
// Dapatkan jalur untuk mendapatkan gambar latar belakang kode verifikasi. Jalur ini menempatkan banyak gambar sebagai string latar belakang captcha_backgrounds = session.getSerVletContext (). GetRealPath ("/web-inf/img/captcha"); Captchaengine ce = capchahelper.getCaptchaengine (captcha_backgrounds); // Kode verifikasi saat ini perlu diperoleh dari server menggunakan JS di halaman web admin captcha captcha = ce.getNextCaptcha (); // Untuk verifikasi, masukkan objek CAPTCHA ke dalam sesi untuk memverifikasi ketika klien mengirimkan kode verifikasi req.getSession (). SetAttribute ("captcha", captcha); // Dapatkan gambar kode verifikasi, ini adalah gambar bufferedImage bitmap yang tidak terkompresi = (bufferedImage) captcha.getchallenge (); resp.setContentType ("gambar/jpeg"); Imageo.write (Image, "JPG", resp.getoutputStream ());Jika Anda menggunakan SpringMVC , tulis saja seperti ini:
// Dapatkan jalur untuk mendapatkan gambar latar belakang kode verifikasi. Jalur ini menempatkan banyak gambar sebagai string latar belakang captcha_backgrounds = session.getSerVletContext (). GetRealPath ("/web-inf/img/captcha"); Captchaengine ce = capchahelper.getCaptchaengine (captcha_backgrounds); // Anda perlu menggunakan JS untuk mendapatkan kode verifikasi saat ini dari server di halaman web admin captcha captcha = ce.getNextCaptcha (); // Untuk verifikasi, masukkan objek captcha ke dalam sesi untuk memverifikasi session.setAttribute ("captcha"), captcha); // Dapatkan gambar kode verifikasi, ini adalah gambar bufferedImage bitmap yang tidak terkompresi = (bufferedImage) captcha.getchallenge (); BytearrayoutputStream bao = new bytearrayoutputStream (); // itu harus dikondensasi menjadi JPG dan ditulis ke aliran output Imageo.write (gambar, "jpg", bao); return bao.tobytearray ();Dalam kedua cara, data biner yang dikembalikan ke klien.
String captcha_backgrounds = session.getServletContext().getRealPath(“/WEB-INF/img/captcha”);
Jalur /WEB-INF/img/captcha berikut ditempatkan dengan beberapa gambar sebagai latar belakang gambar kode verifikasi. Itu pasti jpeg . Mungkin tidak ada batasan pada ukurannya, Anda dapat mencobanya sendiri.
Gunakan <mmg> untuk menunjuk ke alamat ini di halaman web
<img id = "captcha" src = " /captcha_img" Onclick = "RefreshCaptChaimg ()" />
Fungsi JS refreshCaptchaImg() menanggapi klik gambar. Setiap kali klik, gambar kode verifikasi baru diambil. Bagaimana cara memperoleh kembali gambar kode yang benar?
Cukup ubah atribut SRC IMG, tetapi di sini adalah untuk mengatur atribut ini dengan alamat yang sama setiap kali, sehingga tidak akan menyebabkan penyegaran nyata, sehingga metode refreshCaptchaImg() diimplementasikan seperti ini:
Fungsi refreshCaptChaimg () {// ulang gambar kode verifikasi dari server // tambahkan parameter ke tempat ini murni untuk refresh paksa, jika tidak browser tidak akan benar-benar menyegarkan gambar karena alamat URL yang ditunjukkan oleh src) sekarang angsa.Di atas adalah pengantar dan penggunaan jcaptcha, perpustakaan pembuatan kode verifikasi di Java. Saya harap ini akan membantu semua orang untuk belajar Jawa.