Jcaptcha очень мощный. Он может не только генерировать коды проверки на основе изображений, но и коды проверки на основе звука (SINA использует двойные коды проверки). В этой статье кратко представлены примеры библиотеки JCaptcha и использования, давайте посмотрим на нее ниже.
Скачать библиотеку JCaptcha
Зависимость Maven добавляется так:
<Depective> <groupid> com.octo.captcha </GroupId> <artifactid> jcaptcha </artifactid> <sersive> 1.0 </version> </gethyseriation>
Инкапсулировал простой класс
Импорт com.octo.captcha.component.image.backgroundgenerator.backgroundgenerator; import com.octo.captcha.component.image.backgroundgenerator.filereaderrandombackgroundgenerator; импорт com.octo.captcha.component.image.color.randomlistrylistcolorator; com.octo.captcha.component.image.fontgenerator.fontgenerator; import com.octo.captcha.component.image.fontgenerator.randomfontgenerator; import com.octo.captcha.component.image.textpaster.decoratedRandomme.captexterPaster; com.octo.captcha.component.image.textpaster.textdecorator.textDecorator; Image com.octo.captcha.component.image.wordtoImage.comportedToImage; Image com.octo.captcha.component.image.wordtoImage.Image.wordtoImage; Image com.octo.captcha.component.word.wordgenerator.randomwordgenerator; import com.octo.captcha.component.word.worderator.wordgenerator; импорт com.octo.captcha.engine.captchaengine; импорт com.octo.captcha.engine.image.listimage.listimage.listimage.listimage. com.octo.captcha.image.gimpy.gimpyfactory; import java.awt.*;/***Класс, который генерирует изображения проверки кода*/public class capchahelper {private static final integer min_word_length = 4; // Минимальная длина кода версии private integer max_word_length = 4; // максимальная длина кода версии private integer max_word_length = 4; // максимальная длина кода версии Image_height = 30; // Код проверки высота изображения 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), new Font("Credit valley", Font.bold, min_font_size), новый шрифт ("Impact", font.bold, min_font_size)}; // код проверки случайный цвет частный статический конечный цвет [] random_color = новый цвет [] {новый цвет (255, 255, 255), новый цвет (255, 220, 220), новый цвет (220, 255, 255), новый цвет (220, 220, 255), новый цвет (255, 255, 220), новый цвет (220, 255, 220), 220), 220), 220), 220), 220). Частный статический листимагектчангин captchaengine; Публичный статический капчангайн GetCaptChaEngine (Final String Imgpath) {if (captchaEngine == null) {synchronized (capchahelper.class) {if (captchaengine == null && imgpath! RandomListColorGenerator MarderListColorGenerator = new RandomListColorGenerator (random_color); FounalGenerator FounalGenerator = New FileDeaderRandombackgroundGenerator (Image_Width, Image_height, Imgpath); WordGenerator WordGenerator = new RandomWorwWordGenerator (random_word); Fontgenerator fontgenerator = new RandomFontGenerator (min_font_size, max_font_size, random_font); TextDecorator [] textDecorator = new TextDecorator [] {}; TextPaster TextPaster = new DecoredRandomTextPaster (min_word_length, max_word_length, randomlistcolorgenerator, TextDecorator); WordToImage WordToImage = New ComposedWordToImage (FontGenerator, FounalGenerator, TextPaster); addFactory (new GimpyFactory (WordGenerator, WordToImage)); }}; }}} вернуть captchaEngine; }}Ответьте на запрос на правильное кодовое изображение на веб -странице
Вы можете определить servlet , чтобы ответить на этот запрос. Если вы используете springMVC , вы также можете использовать метод в Controller для ответа на этот запрос. В любом случае, вам необходимо указать метод, соответствующий servlet或controller , такой как путь :”/aaa/captcha”
Затем в сервлете, который отвечает на запрос на этот путь, вы можете написать его так:
// Получить путь, чтобы получить фоновое изображение кода проверки. Этот путь ставит много изображений в качестве фоновой строки captcha_backgrounds = session.getservletcontext (). GetRealpath ("/web-inf/img/captcha"); Captchaengine ce = capchahelper.getcaptchaengine (captcha_backgrounds); // Текущий код проверки должен быть получен с сервера с использованием JS на веб -странице Admin Captcha captcha = ce.getNextCaptcha (); // Для проверки поместите объект CAPTCHA в сеанс, чтобы проверить, когда клиент подчиняет код проверки req.getSession (). Setattribute ("captcha", captcha); // Получить изображение кода проверки, это несжатая растровая карта BufferedImage Image = (BufferedImage) captcha.getChallenge (); Resp.SetContentType ("Image/JPEG"); Imageio.write (Image, "jpg", resp.getOutputStream ());Если вы используете Springmvc , просто напишите это так:
// Получить путь, чтобы получить фоновое изображение кода проверки. Этот путь ставит много изображений в качестве фоновой строки captcha_backgrounds = session.getservletcontext (). GetRealpath ("/web-inf/img/captcha"); Captchaengine ce = capchahelper.getcaptchaengine (captcha_backgrounds); // Вам необходимо использовать JS для получения текущего кода проверки с сервера на веб -странице Admin Captcha captcha = ce.getNextCaptcha (); // Для проверки поместите объект CAPTCHA в сеанс для проверки session.setattribute ("captcha"), captcha); // Получить изображение кода проверки, это несжатая растровая карта BufferedImage Image = (BufferedImage) captcha.getChallenge (); BytearRayOutputStream BAO = new BytearRayOutputStream (); // он должен быть сгущен в JPG и записан в выходной потоке ImageIo.Write (Image, «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 ()" />
Function Function refreshCaptchaImg() отвечает на щелчок изображения. Каждый раз, когда он нажимает, получается новое изображение кода проверки. Как повторно приобретать правильный кодовый образ?
Просто измените атрибут SRC IMG, но здесь должен устанавливать этот атрибут с одним и тем же адресом каждый раз, чтобы он не вызовал реального обновления, поэтому метод refreshCaptchaImg() реализован так:
function refreshcaptChaimg () {// re-download vervication код кода с сервером // Добавить параметры в это место чисто для принудительного обновления, в противном случае браузер не будет обновлять изображение, так как адрес URL-адреса, указанный на SRC, не изменился, var now = new () $ ("#captcha"). attr ("src", "/captCha_Img);Выше приведено введение и использование JCaptcha, библиотеки генерации кодов проверки в Java. Я надеюсь, что всем будет полезно изучать Java.