JCAPTCHA est très puissant. Il peut non seulement générer des codes de vérification basés sur l'image, mais aussi des codes de vérification basés sur le son (SINA utilise des codes de vérification deux fois). Cet article présente brièvement la bibliothèque JCAPTCHA et les exemples d'utilisation, jetons-le ci-dessous.
Téléchargez la bibliothèque JCAPTCHA
La dépendance Maven est ajoutée comme ceci:
<dependency> <proupId> com.octo.captcha </rompuprid> <letifactive> jcaptcha </ artifactid> <version> 1.0 </-version> </pedidency>
Encapsulé une classe simple
Importer 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; Image Com.octo.CaptCaptCha.MICHAPONNEM com.octo.captcha.component.image.textpaster.textdecorator.textdecorator; image com.octo.captcha.component.image.wordtoimage.comportswordtoimage; image com.octo.captcha.component.image.wordtoimage.image.wordtoimage; Image; Image; com.octo.captcha. com.octo.captcha.image.gimpy.gimpyfactory; importer java.awt. *; / ** * classe qui génère des images de code de vérification * / classe publique Capchahelper {private static final entier fin final intégrale integer max_word_length = 4; // maximum du code de vérification privé calière finale intigri Image_Height = 30; // Code de vérification Hauteur de l'image Image Private Static Final entier Image_Width = 130; // Code de vérification Largeur d'image Private Static static final entier min_font_size = 15; // FONT MIMINUM FONT DE VÉRIFICATION STATIQUE STATIQUE PRIVATE FINAL INTEGER MAX_FONT_SIZE = 15; // MAXIMUM CODE CODE STATIQUE STATIQUE PRIVATE STATION STATION Caractères // Font aléatoire pour le code de vérification 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 ("Credity", FONT.BOLD, MIN_FONT_SIZE), NOUVEAU FONT ("IMPACT", FONT.BOLD, MIN_FONT_SIZE)}; // Code de vérification Color Random Private Static Final Color [] random_color = new Color [] {nouvelle couleur (255, 255, 255), nouvelle couleur (255, 220, 220), nouvelle couleur (220, 255, 255), nouvelle couleur (220, 220, 255), nouvelle couleur (255, 255, 220), nouvelle couleur (220, 255, 220)}; Listemagecaptchaengine statique privée CaptChaEngine; public static capchaEngine getCaptChaEngine (chaîne finale imgpath) {if (capchaEngine == null) {synchronisé (capchahelper.class) {if (capchaengine == null && imgpath! = null) {CaptCaLined = new listMageCaptChaEngine () {@override protégée VOIDIANFORIALFORIAL () {@Override protégée VoidInitalinitialforo RandomListColOrGenerator RandomListColOrGenerator = new RandomListColOrGenerator (random_color); BackgroundGenerator BackgroundGenerator = new FileReDerRandomBackgroundGenerator (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, randomlistColOrenerator, textdecorator); Wordtoimage wordtoimage = new Composedwordtoimage (FontGenerator, backgroundGenerator, textpaster); addFactory (new gimpyfactory (wordGenerator, wordtoimage)); }}; }}} return captChaEngine; }}Répondez à une demande d'image de code correct dans la page Web
Vous pouvez définir un servlet pour répondre à cette demande. Si vous utilisez springMVC , vous pouvez également utiliser une méthode dans un Controller pour répondre à cette demande. Dans tous les cas, vous devez spécifier une méthode correspondant servlet或controller , comme le chemin est :”/aaa/captcha”
Ensuite, dans le servlet qui répond à la demande de ce chemin, vous pouvez l'écrire comme ceci:
// Obtenez le chemin d'accès pour obtenir l'image d'arrière-plan du code de vérification. Ce chemin place de nombreuses images en tant que chaîne d'arrière-plan captcha_backgrounds = session.getServletContext (). GetRealPath ("/ web-inf / img / captcha"); CapchaEngine ce = capchahelper.getCaptChaEngine (captcha_backgrounds); // Le code de vérification actuel doit être obtenu à partir du serveur à l'aide de JS dans la page Web d'administration CAPTCHA CAPTCHA = CE.GetNextCaptCha (); // pour vérification, placez l'objet CAPTCHA dans la session pour vérifier quand le client soumet le code de vérification req.getSession (). SetAttribute ("CAPTCHA", CAPTCHA); // Obtenez l'image du code de vérification, il s'agit d'une image Bitmap non compressée Bitmap = (BufferedImage) captcha.getChallenge (); resp.setContentType ("image / jpeg"); Imageo.write (image, "jpg", resp.getOutputStream ());Si vous utilisez SpringMVC , écrivez-le simplement comme ceci:
// Obtenez le chemin d'accès pour obtenir l'image d'arrière-plan du code de vérification. Ce chemin place de nombreuses images en tant que chaîne d'arrière-plan captcha_backgrounds = session.getServletContext (). GetRealPath ("/ web-inf / img / captcha"); CapchaEngine ce = capchahelper.getCaptChaEngine (captcha_backgrounds); // Vous devez utiliser JS pour obtenir le code de vérification actuel du serveur dans la page Web de l'administrateur CAPTCHA CAPTCHA = CE.GetNextCaptCha (); // pour vérification, placez l'objet CAPTCHA dans la session pour vérifier session.setAttribute ("CAPTCHA"), CAPTCHA); // Obtenez l'image du code de vérification, il s'agit d'une image Bitmap non compressée Bitmap = (BufferedImage) captcha.getChallenge (); BytearrayoutputStream bao = new bytearrayoutputStream (); // il doit être condensé en JPG et écrit sur le flux de sortie imageo.write (image, "jpg", bao); return bao.toByTearray ();Dans les deux sens, les données binaires retournées au client.
String captcha_backgrounds = session.getServletContext().getRealPath(“/WEB-INF/img/captcha”);
Le chemin d'accès suivant /WEB-INF/img/captcha est placé avec plusieurs images comme arrière-plan de l'image de code de vérification. Ce doit être jpeg . Il n'y a peut-être pas de limite sur la taille, vous pouvez l'essayer vous-même.
Utilisez <MG> pour pointer de cette adresse dans la page Web
<img id = "captcha" src = "/ captcha_img" onclick = "RefreshCaptChaimg ()" />
La fonction JS refreshCaptchaImg() répond au clic de l'image. Chaque fois qu'il clique, une nouvelle image de code de vérification est récupérée. Comment réacquérir l'image du code correct?
Changez simplement l'attribut SRC d'IMG, mais voici pour définir cet attribut avec la même adresse à chaque fois, afin qu'il ne provoque pas un réel rafraîchissement, de sorte que la méthode refreshCaptchaImg() est implémentée comme ceci:
Fonction RefreshCaptChaimg () {// Repodload Verification Code Image du serveur // Ajouter des paramètres à cet endroit uniquement pour un rafraîchissement forcé, sinon le navigateur ne rafraîchira pas vraiment l'image depuis que l'adresse URL pointée par SRC n'a pas changé, "/ captcha_img?Ce qui précède est une introduction et une utilisation de JCAPTCHA, une bibliothèque de génération de code de vérification en Java. J'espère qu'il sera utile à tout le monde d'apprendre Java.