JCaptcha es muy poderoso. No solo puede generar códigos de verificación basados en imágenes, sino también códigos de verificación basados en el sonido (SINA utiliza códigos de verificación de dos veces). Este artículo presenta brevemente la Biblioteca JCAPTCHA y los ejemplos de uso, echemos un vistazo a él a continuación.
Descargue la biblioteca jCaptcha
La dependencia de Maven se agrega así:
<Spendency> <MoupRid> com.octo.captcha </proupid> <artifactid> jCaptcha </arfactid> <versever> 1.0 </versewers> </pendency>
Encapsulado una clase simple
import 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.captcha.component.image.textpaster.textpaster; imagen com.octo.captcha.component.image.textpaster.textdecorator.textdecorator; imagen com.octo.captcha.component.image.wordtoimage.com portedToMage; Image; com.octo.captcha.component.image.wordtoiMage.image.wordToImage; imagen com.octo.captcha.component.word.wordgenerator.randomwordGenerator; import com.octo.captcha.component.word.wordgerator.wordGenerator; import com.octo.captcha.engine.image.listimageCaptchaEngine; import com.octo.captcha.image.gimpy.gimpyfactory; import java.awt.*;/***clase que genera imágenes de código de verificación*/public class Capchahelper {INTERIOR INTENTOR ESTATICO FINAL MIN_LENG Max_word_length = 4; // Longitud máxima del código de verificación Integer estático Final IMAGE_HEight = 30; // VERIFICACIÓN Altura de imagen Integer Estático Private Integer Final Image_Width = 130; // Código de verificación Código de verificación Vidth Integer estático Final Integer MIN_FONT_SIZE = 15; // Mínimo Font de verificación Código de verificación Insteal estatical final MAX_FONT_FONT_FONT_SEATY/ TAJATIVE/ TAJATIVE/ MAJATIVE/ MAJETIVE/ MAJATIVO; Código de verificación Private static final cadena random_word = "0123456789"; // caracteres aleatorios // font aleatorio para código de verificación fontal final final [] random_font = new font [] {new font ("nyala", font.bold, min_font_size), new font ("arial", font.bold, min_font_font_size (mtont), ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ", lo nuevo", ",", ", lo nuevo". Font.Bold, Min_font_Size), New Font ("Credit Valley", Font.Bold, Min_Font_Size), New Font ("Impact", Font.Bold, Min_font_Size)}; // Código de verificación Color aleatorio Color final privado [] 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), nuevo color (220, 255, 220)}; privado estático listimageCaptchaEngine CaptchaEngine; public static CaptChaEngine getCaptChaEngine (Final String imgpath) {if (CaptChaEngine == null) {sincronizado (capchahelper.class) {if (captchaengine == null && imgpath! = null) {captchaAengine = newiMageCaptAptAptINE RandomListColorGenerator RandomListColorGenerator = new RandomListColorGenerator (Random_Color); BackgroundGenerator BackgroundGenerator = new FileReadRandomBackgroundGenerator (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 ComposedWordToImage (FontGenerator, BackgroundGenerator, TextPaster); addFactory (nuevo GimpyFactory (WordGenerator, WordToImage)); }}; }}} return CaptChaEngine; }}Responder a una solicitud de una imagen de código correcta en la página web
Puede definir un servlet para responder a esta solicitud. Si usa springMVC , también puede usar un método en un Controller para responder a esta solicitud. En cualquier caso, debe especificar un método correspondiente al servlet或controller , como la ruta es :”/aaa/captcha”
Luego, en el servlet que responde a la solicitud de esta ruta, puede escribirlo así:
// Obtenga la ruta para obtener la imagen de fondo del código de verificación. Esta ruta coloca muchas imágenes como cadena de fondo captcha_backgrounds = session.getServletContext (). GetRealPath ("/web-Inf/img/captcha"); CaptchaEngine CE = Capchahelper.getCaptchaEngine (Captcha_Backgrounds); // El código de verificación actual debe obtenerse del servidor utilizando JS en la página web de administración Captcha Captcha = CE.GetNextCaptcha (); // Para verificación, coloque el objeto CaptCha en la sesión para verificar cuándo el cliente envía el código de verificación req.getSession (). SetAttribute ("Captcha", Captcha); // Obtener la imagen del código de verificación, esta es una imagen de bufferedimage de mapa de bits sin comprimir = (BufferedImage) Captcha.getChallenge (); resp.setContentType ("Image/jpeg"); ImageIO.Write (imagen, "JPG", resp.getOutputStream ());Si usa SpringMVC , simplemente escríbelo así:
// Obtenga la ruta para obtener la imagen de fondo del código de verificación. Esta ruta coloca muchas imágenes como cadena de fondo captcha_backgrounds = session.getServletContext (). GetRealPath ("/web-Inf/img/captcha"); CaptchaEngine CE = Capchahelper.getCaptchaEngine (Captcha_Backgrounds); // Debe usar JS para obtener el código de verificación actual del servidor en la página web de administración Captcha Captcha = CE.GetNextCaptcha (); // Para verificación, coloque el objeto CaptCha en la sesión para verificar session.setAttribute ("captcha"), captcha); // Obtener la imagen del código de verificación, esta es una imagen de bufferedimage de mapa de bits sin comprimir = (BufferedImage) Captcha.getChallenge (); ByteArRayOutputStream bao = new ByteArRaReOutputStream (); // debe condensarse en jpg y escribir en la transmisión de salida imageio.write (imagen, "jpg", bao); return bao.tobytearray ();En ambos sentidos, los datos binarios devueltos al cliente.
String captcha_backgrounds = session.getServletContext().getRealPath(“/WEB-INF/img/captcha”);
La siguiente ruta /WEB-INF/img/captcha se coloca con múltiples imágenes como fondo de la imagen del código de verificación. Debe ser jpeg . Puede que no haya límite en el tamaño, puede probarlo usted mismo.
Use <IMG> para señalar esta dirección en la página web
<img id = "captcha" src = " /captcha_img" onClick = "refreshCaptChaimg ()" />
La función js refreshCaptchaImg() responde al clic de la imagen. Cada vez que hace clic, se recupera una nueva imagen del código de verificación. ¿Cómo volver a adquirir la imagen de código correcta?
Simplemente cambie el atributo SRC de IMG, pero aquí está establecer este atributo con la misma dirección cada vez, para que no cause una actualización real, por lo que el método refreshCaptchaImg() se implementa así:
Función RefreshCaptChaimg () {// RE-RE-REDOMBRA IMPRESA DE CÓDIGO DE VERIFICACIÓN DEL SERVER // Agregar parámetros a este lugar puramente para la actualización forzada, de lo contrario, el navegador no actualizará realmente la imagen ya que la dirección de URL puntiaguda por SRC no ha cambiado, var Now = New Date () $ ("#Captcha"). Attr ("SRC", "/Captcha_Img?"Lo anterior es una introducción y uso de JCaptcha, una biblioteca de generación de código de verificación en Java. Espero que sea útil para todos aprender Java.