Este artigo será totalmente explicado na página da recepção para a mesa de trás. Vamos dar uma olhada abaixo.
1. Código de primeiro plano, imagem.jsp
<%@ página de página = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%> <! Doctype html public "-// w3c // dtd html 4.01 transitório // en" "http://www.w3.org/tr/html4/loose.dtd"><html><head><meta http-equiv =" content-type "content =" text/html; charset = utf-8 "> <title> imagem verificação da imagem </title> <scriting <script <script; src = "$ {PageContext.Request.ContextPath} /static/js/jquery-1.10.2.min.js"> </script> </ad Head> <body> <formulário action = "##" Método = 'post'> <input Type = "Hidden" id = "userId" Name = "UserID" = UserId = 'Post'> <input Type = "Hidden" Id = "UserId" Name = "UserId" name = 'loginName' id = "loginName" PaceHolder = "UserName" value = "" class = 'form-confntrol'/> </div> </div> <div> <input type = "senha" autocompletenete = "off" id = "pwd" name = "pwd" placeholder = "senha" <class = cen) id = "validateCode" onblur = "checkImg (this.value)" name = "validateCode" type = "text" placeholder = "inserir código de verificação"/> </div> <pan> <img id = "codevalidateImg" onclick = "javasscript: flushvalcode (); href = "JavaScript: FlushValidatecode ();" > Altere um </a> </p> </div> <div> <pan> </span> </div> <div> <div> <input type = "caixa de seleção" name = "lembrar" value = "1" class = 'iCheck-me' data-skin = "square" data-color = "" blue = "lembrar> <bel =" lembrar "> lembrar </"> metre "> metre-skin"> metrining "> lagin"> ladbroin "> ladring"> metrin> metring "> metrin> metrin> metrin> metrin> metrin> metrin> metrin> metrin> metrin> metrin> metrin> metrin> metrin> metrin> metrin> metrin> metrin> metrin> metrin> metrin> metrin> metrin> metrin> metrin> metrin> metrin> metra"> metrining "> metrô". OnClick = "JavaScript: submitform ();" class = 'btn btn-primary'> </div> </morm> <script type = "text/javascript"> $ (document) .ready (function () {flushValidateCode (); // refrescando e gera código de verificação {varrate); document.getElementById ("codEvalidateImg"); validateImgobject.src = "$ {PagEcontext.request.ContextPath}/getsManageLogincode? time =" + new date ();}/* verifique se o código de verificação é inserido corretamente*/function check (code) {varey "$ {pageContext.request.ContextPath}/checkImageCode"; $ .get (url, {"validateCode": code}, function (data) {if (data == "ok") {alert ("ok!")} else {alert ("error!") flushValidatecode ();}})} </cript> </body> </html>2. Código de fundo ImageGencontroller.java
package com.dufyun.springmvc.web.controller;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Controller;import org.springframework.util.stringUtils; importar org.springframework.web.bind.annotation.requestmapping; importar org.springframework.web.bind.annOnTation.ResponseBody; Import.Dufy.javaweB.Test.RandomMomMomAnTonseSonseBody; Import.dufy.javaweb.Test.RandomMomMomAnTonsonseBody; @RequestMapping (value = "/toimg") public string toimg () {return "image/image"; } // Faça login para obter o código de verificação @RequestMapping ("/getSysManageLogincode") @ResponseBody Public String getSysManageLogincode (resposta httpSertLeSponse, httpServletRequest Solicy) o tipo de seleção do tipo. Response.setheader ("Pragma", "No-Cache"); // Defina as informações do cabeçalho da resposta para dizer ao navegador para não armazenar em cache essa resposta de conteúdo.setheader ("Cache-Control", "No-Cache"); Response.setheader ("set-cookie", "name = value; httponly"); // Defina a propriedade httponly para impedir que os ataques Xs respondam.SetDateHeader ("Expire", 0); RandomValidateCode RandomValidateCode = new RandomValidatEcode (); tente {RandomValidateCode.getRandcode (solicitação, resposta, "imageCode"); // Método da imagem de saída} Catch (Exceção e) {e.printStackTrace (); } retornar ""; } // Código de verificação Verificação @requestMapp (value = "/checkImageCode") @ResponseBody public String checkTCode (solicitação httpServletRequest, httpServletResponse resposta) {String validateCode = request.getParameter ("validateCode"); Código da String = NULL; // 1: Obtenha as informações do código de verificação no cookie cookie [] cookies = request.getcookies (); para (cookie cookie: cookies) {if ("imageCode" .equals (cookie.getName ())) {code = cookie.getValue (); quebrar; }} // 1: obtenha as informações do código de verificação da sessão // string code1 = (string) request.getSession (). GetAttribute (""); // 2: determine se o código de verificação está correto se (! StringUtils.isEmpty (validateCode) && validateCode.equals (code)) {return "ok"; } retornar "erro"; // Não realizei a verificação do processamento difuso do tamanho da carta aqui. Se você estiver interessado, pode tentar! }}3. Classe de ferramenta RandomValidateCode.java para gerar código de verificação
pacote com.dufyfy.javaweb.test; importar java.awt.color; importar java.awt.font; importar java.awt.graphics; importar java.awt.Image.MufferedImage; import java.io.byTearArrayArrayRaRaRaRaRaRaRaRaRaRaRa.MaRil.TrandomMom; javax.servlet.http.cookie; importar javax.servlet.http.httpServletRequest; importar javax.servlet.http.httpServletResponse; classe public class Randomvalidatecode {private Random = novo aleatório (); Private String RandString = "0123456789AbcdefghijklmnopqrstStuvwxyz"; // string gerada aleatoriamente private int width = 80; // largura de imagem private int alting = 26; // altura da imagem private int linesize = 40; // número de linhas de interferência private int stringnum = 4; Font ("FILLSYS", FONT.CENTER_BASELINE, 18); } /** Obtenha cor* / color privado getRandcolor (int fc, int bc) {if (fc> 255) fc = 255; if (bc> 255) bc = 255; int r = fc + aleatoriamente.nextInt (bc - fc - 16); int g = fc + aleatoriamente.nextInt (bc - fc - 14); int b = fc + aleatoriamente.nextInt (bc - fc - 18); retornar nova cor (R, G, B); } /** Draw string* / private string drawstring (gráficos g, string aleatomstring, int i) {g.setFont (getFont ()); g.setColor (nova cor (Random.NextInt (101), Random.NextInt (111), Random .Nextint (121))); String rand = string.valueof (getrandomstring (aleatom.nextInt (randString.length ())); RandomString += rand; G.Translate (Random.NextInt (3), Random.NextInt (3)); G.DrawString (Rand, 13 * i, 16); retornar Randomstring; } /** Desenhe a linha de interferência* / private void line (gráficos g) {int x = aleatom.nextInt (largura); int y = random.nextint (altura); int xl = random.nextint (13); int yl = random.nextint (15); G.Drawline (x, y, x + xl, y + yl); } /** Obtenha caracteres aleatórios* / public String getRandomString (int num) {return string.valueof (RandString.Charat (num)); } / *** Gere imagem aleatória* / public void getRandCode (solicitação httpServletRequest, resposta httpServletResponse, chave de string) {// A classe bufferImage é uma classe de imagem com um buffer, e a classe de imagem é uma classe usada para descrever a imagem da imagem da imagem. Gráficos g = image.getGraphics (); // gerar objeto gráfico do objeto de imagem. Você pode executar várias operações de desenho na imagem modificando o objeto G.FillRect (0, 0, largura, altura); G.SetFont (New Font ("Times New Roman", Font.Roman_Baseline, 18)); g.setColor (getrandcolor (110, 133)); // desenha a linha de interferência para (int i = 0; i <= linesize; i ++) {drawline (g); } // desenhe o caractere aleatório string aleatorystring = ""; for (int i = 1; i <= stringnum; i ++) {aleatherstring = drawstring (g, RandomString, i); } // 1: coloque o código de verificação gerado aleatoriamente no cookie cookie = novo cookie (chave, RandomString); Response.Addcookie (Cookie); // 2: Coloque o código de verificação gerado aleatoriamente na sessão String sessionId = request.getSession (). GetId (); request.getSession (). SetAttribute (sessionId+key, RandomString); System.out.println ("************" + RandomString); // Resumo: Ambos os métodos são bons, // (1): use cookies para enviar o código de verificação para o navegador dianteiro, que não é seguro! Não recomendado para uso. // (2): O uso do método da sessão pode resolver o problema de que o código de verificação não é enviado ao navegador, que é mais seguro, mas se o número de usuários for muito grande, esse método de armazenamento pressionará o servidor e afetará o desempenho do servidor. Não recomendado para uso. // Este método é implementado temporariamente aqui. A melhor maneira é armazenar o código de verificação gerado no cache usado no projeto e definir o tempo de invalidação, que pode não apenas obter segurança, mas também reduzir a pressão no servidor. G.Dispose (); tente {byteArrayoutputStream tmp = new ByteArrayOutputStream (); Imageio.write (imagem, "png", tmp); tmp.close (); Inteiro contentLength = tmp.size (); Response.setheader ("Length-comprimento", contentLength + ""); Response.getOutputStream (). write (tmp.tobytearray ()); // emitir a imagem na memória para o cliente em fluxo} catch (Exceção e) {e.printStackTrace (); } finalmente {try {Response.getOutputStream (). Flush (); resposta.getOutputStream (). Close (); } catch (Exceção E2) {E2.PrintStackTrace (); }}}} 4. Resumo
O conteúdo deste artigo termina aqui. Se você não entende o conteúdo dentro, pode deixar uma mensagem para discutir. Espero que o conteúdo deste artigo seja útil para o estudo e o trabalho de todos.