O JCAPTCHA é muito poderoso. Ele pode não apenas gerar códigos de verificação baseados em imagem, mas também códigos de verificação baseados em som (o SINA usa códigos de verificação duplos). Este artigo apresenta brevemente os exemplos da biblioteca e uso do JCAPTCHA, vamos dar uma olhada abaixo.
Baixe a biblioteca JCaptcha
A dependência do Maven é adicionada assim:
<Depencency> <PuerpId> com.octo.captcha </frugiD> <ArtifactId> jcaptcha </ArtifactId> <versão> 1.0 </versão> </dependency>
Encapsulou uma classe simples
importar com.octo.captcha.component.image.backgroundGenerator.backgroundGenerator; importar com.octo.captcha.component.image.backgroundGenerator.fileReaderMombackgroundGenerator; import com.octo.captcha.component.image.image.color.randomlistcolorGerColorGer; com.octo.captcha.component.image.fontgenerator.fontGenerator; importar com.octo.captcha.component.image.fontgenerator.randomfontgenerator; import com.octo.captcha.component.image.TexTaster.DecoratedRandomTomTomTexter; imagexter com.octo.captcha.component.image.TextPaster.textPaster; imagem com.octo.captcha.component.image.textpaster.textDecorator.textDecorator; imagem com.octo.captcha.component.image.wordtoimage.comportedwordTordTOImage; com.octo.captcha.component.image.wordtoimage.image.wordtoimage;image com.octo.captcha.component.word.wordgenerator.RandomWordGenerator;import com.octo.captcha.component.word.wordgenerator.WordGenerator;import com.octo.captcha.engine.CaptchaEngine;import com.octo.captcha.engine.image.listimagecaptchaengine; importar com.octo.captcha.image.gimpy.gimpyfactory; importar java.awt.*;/** ** ** CLASS INTEIRAGEM que gera imagens de código de verificação*/public class Capchahelper {private final). Max_word_length = 4; // Comprimento máximo do código de verificação estático privado Final Inteiro Image_Height = 30; // Código de verificação Altura da imagem privada estática final Inteiro Imagem_width = 130; // Código de verificação Largura Private estático estático Final Integer min_font_size = 15; // Minimum FONT Of Code de verificação privada Static Stantic Intoger 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), NOVA FONT ("Credit Valley", Font.Bold, Min_Font_Size), New Font ("Impact", Font.Bold, Min_Font_Size)}; // Código de verificação cor aleatória cor estática privada estática final [] random_color = nova cor [] {nova cor (255, 255, 255), nova cor (255, 220, 220), nova cor (220, 255, 255), nova cor (220, 220, 255), nova cor (255, 255), 220; Private estático listimagecaptchaengine captchaengine; public static CaptchaEngine getCaptchaEngine(final String imgPath) { if (captchaEngine == null) { synchronized (CapchaHelper.class) { if (captchaEngine == null && imgPath != null) { captchaEngine = new ListImageCaptchaEngine() { @Override protected void buildInitialFactories() { RandomListColorGenerator randomlistColorGenerator = new RandomListColorGenerator (Random_Color); BackgroundGenerator BackgroundGenerator = new 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 composedwordToImage (fontgenerator, backgroundGenerator, textposter); addFactory (novo gimpyFactory (WordGenerator, WordToImage)); }}; }}} retorna captchaengine; }}Responda a uma solicitação de uma imagem de código correta na página da web
Você pode definir um servlet para responder a essa solicitação. Se você usar springMVC , também poderá usar um método em um Controller para responder a essa solicitação. De qualquer forma, você precisa especificar um método correspondente ao servlet或controller , como o caminho é :”/aaa/captcha”
Então, no servlet que responde à solicitação deste caminho, você pode escrever assim:
// Obtenha o caminho para obter a imagem em segundo plano do código de verificação. Este caminho coloca muitas imagens como string de fundo Captcha_backgrounds = session.getServletContext (). GetRealPath ("/web-inf/img/captcha"); Captchaengine CE = Capchahelper.getCaptchaengine (Captcha_backgrounds); // O código de verificação atual precisa ser obtido do servidor usando JS na página do administrador CAPTCHA CAPTCHA = CE.GETNEXTCAPTCHA (); // Para verificação, coloque o objeto CAPTCHA na sessão para verificar quando o cliente envia o código de verificação req.getSession (). SetAttribute ("CAPTCHA", CAPTCHA); // Obtenha a imagem do código de verificação, esta é uma imagem bitmap bitmap não compactada = (bufferImage) captcha.getChallenge (); resp.SetContentType ("Image/jpeg"); Imageio.write (imagem, "jpg", resp.getOutputStream ());Se você usa SpringMVC , escreva assim:
// Obtenha o caminho para obter a imagem em segundo plano do código de verificação. Este caminho coloca muitas imagens como string de fundo Captcha_backgrounds = session.getServletContext (). GetRealPath ("/web-inf/img/captcha"); Captchaengine CE = Capchahelper.getCaptchaengine (Captcha_backgrounds); // Você precisa usar o JS para obter o código de verificação atual do servidor na página do administrador CAPTCHA CAPTCHA = CE.GetNextCaptcha (); // Para verificação, coloque o objeto CAPTCHA na sessão para verificar session.setAttribute ("CAPTCHA"), CAPTCHA); // Obtenha a imagem do código de verificação, esta é uma imagem bitmap bitmap não compactada = (bufferImage) captcha.getChallenge (); ByteArrayOutputStream bao = new ByteArrayOutputStream (); // Deve ser condensado no JPG e escrito no fluxo de saída imageio.write (imagem, "jpg", bao); retornar bao.tobytearray ();Em ambas as maneiras, os dados binários retornados para o cliente.
String captcha_backgrounds = session.getServletContext().getRealPath(“/WEB-INF/img/captcha”);
O seguinte caminho /WEB-INF/img/captcha é colocado com várias imagens como plano de fundo da imagem do código de verificação. Deve ser JPEG . Pode não haver limite para o tamanho, você pode experimentar você mesmo.
Use <MG> para apontar para este endereço na página da web
<img id = "captcha" src = " /captcha_img" onclick = "refreshcaptchaimg ()" />
A função JS refreshCaptchaImg() responde ao clique da imagem. Cada vez que clica, uma nova imagem de código de verificação é recuperada. Como reaquar a imagem de código correta?
Basta alterar o atributo SRC do IMG, mas aqui está para definir esse atributo com o mesmo endereço todas as vezes, para que não cause uma atualização real, para que o método refreshCaptchaImg() seja implementado assim:
função refreshcaptchaimg () {// Código de verificação de download da imagem do servidor // Adicione parâmetros a este local puramente para atualização forçada, caso contrário, o navegador não atualizará realmente a imagem, pois o endereço da URL apontado pelo SRC não mudou, var now = new Date () $ ("#CaptCHA"). Att ("src" "/capping;O exposto acima é uma introdução e uso do JCAPTCHA, uma biblioteca de geração de código de verificação em Java. Espero que seja útil para todos aprenderem Java.