Jcaptcha قوي جدا. لا يمكن فقط إنشاء رموز التحقق المستندة إلى الصور ، ولكن أيضًا رموز التحقق القائمة على الصوت (تستخدم Sina رموز التحقق من شقين). تقدم هذه المقالة بإيجاز مكتبة JCAPTCHA والاستخدام أمثلة ، دعنا نلقي نظرة عليها أدناه.
قم بتنزيل مكتبة JCaptcha
تتم إضافة تبعية Maven مثل هذا:
<Rependency> <roupeD> com.octo.captcha </rougeid> <StifactId> jcaptcha </shintifactid> <soph> 1.0 </version> </sependency>
تغليف فئة بسيطة
استيراد com.octo.captcha.component.image.backgroundgenerator.backgroundgenerator com.octo.captcha.component.image.fontgenerator.fontgenerator ؛ استيراد com.octo.captcha.component.image.fontgenerator.randomfontgenerator com.octo.captcha.component.image.textpaster.textpaster ؛ image com.octo.captcha.component.image.textpaster.textDecorator.textDecorator ؛ image com.octo.captcha.component.image.wordtoimage.cordwordtoimage ؛ com.octo.captcha.component.image.wordtoimage.image.wordtoimage ؛ image com.octo.captcha.component.wordgenerator.randomwordgenerator ؛ import com.octo.captcha.component.wordgeneratoratoratorator ؛ com.octo.captcha.engine.image.listimageCaptChaEngine ؛ استيراد com.octo.captcha.image.gimpy.gimpyfactory ؛ استيراد java.awt. max_word_length = 4 ؛ // الحد الأقصى لطول رمز التحقق الخاص الثابتة الثابتة ، Impical Image_height = 30 ؛ // ارتفاع رمز التحقق من ارتفاع الصورة النهائية الثابتة الخاصة رمز خاص ثابت Static Final String Random_Word = "0123456789" ؛ // أحرف عشوائية // الخط العشوائي لعلم رمز التحقق من الخط النهائي الثابت [] Random_font = new font [] {new font ("nyala" ، font.bold ، min_font_size) ، new font ("ARIAL ، font.bold ، min_font_size) ، new font ("Credit Valley" ، font.bold ، min_font_size) ، font new ("refact" ، font.bold ، min_font_size)} ؛ // رمز التحقق من اللون العشوائي للون النهائي الثابت [] 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 ، 220) ، New Color (220 ، 255 ، 220) ؛ static private listimageCaptChaEngine captchaengine ؛ public captchaengine getCaptChaEngine (السلسلة النهائية imgpath) {if (captChaEngine == null) {synchronized (capchahelper.class) {if (captChaEngine == null && imgpath! = null) {captchaengine = new listimageCaptCaptIn RandomListColorGenerator RandomListColorGenerator = new RandomListColorGenerator (Random_Color) ؛ BackgroundGenerator BackgroundGenerator = جديد 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 WordwordToImage (fontgenerator ، backgroundGenerator ، TextPaster) ؛ AddFactory (gimpyfactory جديد (WordGenerator ، WordToImage)) ؛ }} ؛ }}} return captchaengine ؛ }}الرد على طلب للحصول على صورة رمز صحيحة في صفحة الويب
يمكنك تحديد servlet للرد على هذا الطلب. إذا كنت تستخدم springMVC ، فيمكنك أيضًا استخدام طريقة في Controller للرد على هذا الطلب. في أي حال ، تحتاج إلى تحديد طريقة تتوافق مع servlet或controller ، مثل المسار هو :”/aaa/captcha”
ثم في servlet الذي يستجيب لطلب هذا المسار ، يمكنك كتابته مثل هذا:
// احصل على المسار للحصول على صورة الخلفية لرمز التحقق. يضع هذا المسار العديد من الصور كسلسلة خلفية captcha_backgrounds = session.getServletContext (). getRealPath ("/web-inf/img/captcha") ؛ captchaengine ce = capchahelper.getCaptChaEngine (captcha_backgrounds) ؛ // يجب الحصول على رمز التحقق الحالي من الخادم باستخدام JS في صفحة Web Admin Captcha captcha = ce.getNextCaptCha () ؛ // للتحقق ، ضع كائن captcha في الجلسة للتحقق من أن العميل يقدم رمز التحقق req.getSession (). setAttribute ("captcha" ، captcha) ؛ // احصل على صورة رمز التحقق ، هذه صورة غير مضغوطة BufferedImage = (BufferedImage) captcha.getchallenge () ؛ Resp.SetContentType ("Image/JPEG") ؛ imageio.write (صورة ، "jpg" ، resp.getOutputStream ()) ؛إذا كنت تستخدم springMVC ، فما عليك سوى كتابتها مثل هذا:
// احصل على المسار للحصول على صورة الخلفية لرمز التحقق. يضع هذا المسار العديد من الصور كسلسلة خلفية captcha_backgrounds = session.getServletContext (). getRealPath ("/web-inf/img/captcha") ؛ captchaengine ce = capchahelper.getCaptChaEngine (captcha_backgrounds) ؛ // تحتاج إلى استخدام JS للحصول على رمز التحقق الحالي من الخادم في صفحة Web Admin Captcha captcha = ce.getNextCaptCha () ؛ // للتحقق ، ضع كائن Captcha في الجلسة للتحقق من Session.setAttribute ("captcha") ، captcha) ؛ // احصل على صورة رمز التحقق ، هذه صورة غير مضغوطة BufferedImage = (BufferedImage) captcha.getchallenge () ؛ bytearrayoutputstream bao = جديد bytearrayoutputStream () ؛ // يجب تكثيفه في JPG وكُتبت إلى Dream Dream imageio.write (صورة ، "JPG" ، BAO) ؛ إرجاع bao.tobytearray () ؛في كلا الاتجاهين ، البيانات الثنائية التي تم إرجاعها إلى العميل.
String captcha_backgrounds = session.getServletContext().getRealPath(“/WEB-INF/img/captcha”);
يتم وضع المسار /WEB-INF/img/captcha التالي مع صور متعددة كخلفية لصورة رمز التحقق. يجب أن يكون JPEG . قد لا يكون هناك حد للحجم ، يمكنك تجربته بنفسك.
استخدم <img> للإشارة إلى هذا العنوان في صفحة الويب
<img id = "captcha" src = " /captcha_img" onClick = "RefreshCaptChaimg ()" />
يستجيب JS Function refreshCaptchaImg() للنقرة على الصورة. في كل مرة تنقر فيها ، يتم استرداد صورة رمز التحقق الجديد. كيف تعيد الحصول على صورة الكود الصحيحة؟
ما عليك سوى تغيير سمة SRC لـ IMG ، ولكن هنا هو تعيين هذه السمة مع نفس العنوان في كل مرة ، بحيث لا يتسبب في تحديث حقيقي ، وبالتالي يتم تنفيذ Method refreshCaptchaImg() مثل هذا:
وظيفة refreshcaptChaMG () {// إعادة تنزيل صورة رمز التحقق من الخادم // إضافة معلمات إلى هذا المكان بحتة للتحديث القسري ، وإلا فلن يقوم المتصفح بتحديث الصورة حقًا لأن عنوان url الذي أشير إليه SRC لم يتغير ، var now = new date () $ ("#captcha"). attrc ("src" ، "ما سبق هو مقدمة واستخدام JCaptcha ، مكتبة توليد رمز التحقق في Java. آمل أن يكون من المفيد للجميع أن يتعلموا جافا.