Jcaptcha ist sehr mächtig. Es kann nicht nur bildbasierte Verifizierungscodes erzeugen, sondern auch schallbasierte Verifizierungscodes (SINA verwendet zweifache Verifizierungscodes). In diesem Artikel wird kurz die JCaptcha -Bibliothek und die Nutzungsbeispiele vorgestellt. Schauen wir uns sie unten an.
Laden Sie die JCaptcha -Bibliothek herunter
Die Abhängigkeit von Maven wird so hinzugefügt:
<De vorhöhe> <gruppe> com.octo.captcha </Groupid> <artifactId> jcaptcha </artifactId> <version> 1.0 </Version> </abhängig>
Verkapselt eine einfache Klasse
importieren com.octo.captcha.component.image.backgroundGenerator.backgroundGenerator; import com.octo.captcha.component.image.backgroundGenerator.FilereaderrandombackgroundGenerator; import Com.octo.captcha.component.image.Color.RandomListcolorGenerator; com.octo.captcha.component.image.fontgenerator.fontgenerator; import com.octo.captcha.component.image.fontgenerator.randomfontGenerator; import com.octo.captcha.component.image.textpaster.decoratedrandrandrandrandrandrandrandpaster; com.octo.captcha.component.image.textpaster.textpaster; Bild com.octo.captcha.component.image.textpaster.textdecorator.textdecorator; Bild com.octo.captcha.component.image.wordtoimage.comportedwordDWordedWordedwordsword com.octo.captcha.component.image.wordtoimage.image.wordtoimage; Bild com.octo.captcha.component.word.wordgenerator.randomwordGenerator; Import Com.octo.captcha.comPonent.wordswordGenerator; com.octo.captcha.engine.image.listimagecaptchaengine; importieren com.octo.captcha.image.gimpy.gimpyfactory; Java.awt. Max_word_length = 4; // Maximale Länge des Verifizierungscodees private statische statische Finale Integer Image_Height = 30; // Verifizierungscode Bildhöhe private statische endzahlende Integer image_width = 130; // Verifizierungscode Bildbreite privates statisches Final -Integer min_font_size = 15; // minimales Verifizierungscodes privates code code private static final String RANDOM_WORD = "0123456789";// Random characters// Random font for verification code 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), neuer Schriftart ("Credit Valley", font.bold, min_font_size), neuer Schriftart ("Impact", font.bold, min_font_size)}; // Verification code random color 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 statische listimagecaptchaengine captchaengine; public static captchaEngine getcaptchaengine (endgültige String imgpath) {if (captchaEngine == null) {synchronized (capchahelper.class) {if (captchaEngine == null && imgpath! RandomListColGenerator randomListColGenerator = new randomListColGenerator (random_color); BackgroundGenerator HintergrundGenerator = new FileRanderRandombackgroundGenerator (Image_Width, Image_Height, ImgPath); WordGenerator WordGenerator = neuer 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, randomListColgenerator, textDecorator); Wordtoimage wordtoimage = new composedWordToImage (FontGenerator, HintergrundGenerator, TextPaster); Addfactory (neuer GimpyFactory (WordGenerator, WordToImage)); }}; }}} return captchaEngine; }}Beantworten Sie eine Anfrage nach einem korrekten Codebild auf der Webseite
Sie können einen servlet definieren, um auf diese Anfrage zu antworten. Wenn Sie springMVC verwenden, können Sie auch eine Methode in einem Controller verwenden, um auf diese Anfrage zu antworten. In jedem Fall müssen Sie eine Methode angeben, die servlet或controller entspricht, wie z. B. der Pfad :”/aaa/captcha”
Dann können Sie im Servlet, das auf die Anfrage für diesen Pfad reagiert, wie folgt schreiben:
// Erhalten Sie den Pfad, um das Hintergrundbild des Verifizierungscode zu erhalten. Dieser Pfad legt viele Bilder als Hintergrund String captcha_backgrounds = session.getServletContext (). GetRealPath ("/web-inf/img/captcha"); Captchaengine ce = capchahelper.getCaptchaEngine (captcha_backgrounds); // Der aktuelle Verifizierungscode muss vom Server verwendet werden, indem JS im Admin -Webseite captcha captcha = ce.getNextCaptcha () verwendet werden. // Zur Überprüfung das Captcha -Objekt in die Sitzung einfügen, um zu überprüfen, ob der Client den Verifizierungscode req.getSession (). // Erhalten Sie das Verifizierungscode -Bild, dies ist ein unkomprimiertes Bitmap BufferedImage Image = (bufferedImage) captcha.getChallenge (); resp.setContentType ("Bild/jpeg"); Imageio.Write (Bild, "JPG", resp.getOutputStream ());Wenn Sie SpringMVC verwenden , schreiben Sie es einfach wie folgt:
// Erhalten Sie den Pfad, um das Hintergrundbild des Verifizierungscode zu erhalten. Dieser Pfad legt viele Bilder als Hintergrund String captcha_backgrounds = session.getServletContext (). GetRealPath ("/web-inf/img/captcha"); Captchaengine ce = capchahelper.getCaptchaEngine (captcha_backgrounds); // Sie müssen JS verwenden, um den aktuellen Verifizierungscode vom Server im Admin -Webseiten Captcha Captcha = CE.GetNextCaptcha () zu erhalten. // zur Überprüfung das Captcha -Objekt in die Sitzung einlegen, um die Sitzung zu verifizieren. // Erhalten Sie das Verifizierungscode -Bild, dies ist ein unkomprimiertes Bitmap BufferedImage Image = (bufferedImage) captcha.getChallenge (); BytearrayoutputStream bao = new bytearrayoutputStream (); // Es sollte in JPG kondensiert und in das Ausgabestream imageio.write (Bild, "JPG", Bao) geschrieben werden; return bao.tobytearray ();In beiden Arten haben die zurückgegebenen Binärdaten an den Client.
String captcha_backgrounds = session.getServletContext().getRealPath(“/WEB-INF/img/captcha”);
Der folgende Pfad /WEB-INF/img/captcha wird mit mehreren Bildern als Hintergrund des Verifizierungscodebildes platziert. Es muss JPEG sein. Die Größe kann keine Begrenzung geben, Sie können sie selbst ausprobieren.
Verwenden Sie <img>, um auf diese Adresse auf der Webseite zu verweisen
<img id = "captcha" src = " /captcha_img" onclick = "refreshcaptchaimg ()" />
Die JS -Funktion refreshCaptchaImg() reagiert auf den Klick auf das Bild. Jedes Mal, wenn es klickt, wird ein neues Verifizierungscode -Bild abgerufen. Wie kann man das richtige Codebild wieder aufnehmen?
Ändern Sie einfach das SRC -Attribut von IMG, aber hier soll dieses Attribut jedes Mal mit derselben Adresse festgelegt werden, damit es keine echte Aktualisierung verursacht, sodass die Methode refreshCaptchaImg() so implementiert wird:
Funktion RefreshcaptChaimg () {// Verifizierungscode-Bild des Verifizierungscodes aus dem Server // Parameter zu diesem Ort nur für erzwungene Aktualisierung hinzufügen, ansonsten wird der Browser das Bild nicht wirklich aktualisieren, da die URL-Adresse von SRC nicht geändert wurde, var jetzt = neues Datum () $ ("#captcha"). Attr ("Src).Das obige ist eine Einführung und Verwendung von JCaptcha, einer Bibliothek für Verifizierungscodegenerierung in Java. Ich hoffe, es wird für alle hilfreich sein, Java zu lernen.