Эта статья будет полностью объяснена со страницы стойки регистрации до заднего стола. Давайте посмотрим на это ниже.
1. Код на переднем плане, image.jsp
<%@ page language = "java" contentType = "text/html; charset = utf-8" pageencoding = "utf-8"%> <! doctype html public "-// w3c // dtd html 4.01 transitional // en"-// w3c // dtd html 4.01 // en «http://www.w3.org/tr/html4/loose.dtd"><html><head><meta http-equiv =" content-type "content =" text/html; charset = utf-8 "> <Tempt> Получите код проверки изображения </title> <script type =" xavascript " src="${pageContext.request.contextPath }/static/js/jquery-1.10.2.min.js"></script></head><body> <form action="##" method='post'> <input type="hidden" id="userId" name="userId" value=""> <div> <div> <input type="text" name = 'LoginName' id = "loginName" PlaceWarder = "userName" value = "" class = 'form-control'/> </div> </div> <div> <input type = "password" AutocOflete = "OFF" ID = "pwd" name = "pwd" Placeholder = "password" class = 'form-control div'/> </> <//name Div> </> </> <//> </> </> </> <//name <//name </> <//name <//nam id = "validatecode" onblur = "checkimg (this.value)" name = "validatecode" type = "text" Placeholder = "Enter Verification Code"/> </div> <pan> <id id = "codevalidateimg" onclick = "javascript: flushvalidatecode (); href = "javaScript: flushvalidateCode ();" >Change one</a></p> </div> <div> <span></span> </div> <div> <div> <input type="checkbox" name="remember" value="1" class='icheck-me' data-skin="square" data-color="blue" id="remember"> <label for="remember"> Remember me</label> </div> <input type="button" value="Login" onclick = "javaScript: supportform ();" class = 'btn btn-primary'> </div> </form> <script type = "text/javascript"> $ (document) .ready (function () {flushValidateCode (); // Обновить и генерировать код проверки});/* revely и генерировать код версии*/функция flushValeCode () {vareDIDETIMGECE = = FUNCALIDATECODE (). document.getElementById ("codevalidateImg"); validateImgoBject.src = "$ {pagecontext.request.contextPath}/getsySmanageLogincode? Time =" + new Date ();}/* Убедитесь, что код проверки вводится правильно*/функция checkimg (код) {varrl =. "$ {pageContext.Request.contextPath}/checkImageCode"; $ .get (url, {"validatecode": code}, function (data) {if (data == "ok") {alert ("ok!")} else {alert ("error!") flushvalidatecode ();}})} </script> </body> </html>;}}) </script> </body> </html>2. Фоновый код Imagegencontroller.java
пакет com.dufyun.springmvc.web.controller; import javax.servlet.http.cookie; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservelponse; import org.springframe.stp.comtpservonse; org.springframework.util.stringutils; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bindtation.antation.responsebody; imporm.dufy.javaweb.test.randomvalil @Requestmapping (value = "/toimg") public String toimg () {return "image/image"; } // Вход в систему, чтобы получить код проверки @RequestMapping ("/getSySmanageLogincode") @Responsebody public String getSysManageLogincode (httpservletresponse respons response.setheader ("pragma", "no-cache"); // Установите информацию заголовка ответа, чтобы сообщить браузеру не кэшировать этот контент. response.setheader ("set-cookie", "name = value; httponly"); // Установить свойство httponly, чтобы предотвратить xs Attacks. SetDateHeader («истекает», 0); RandomValidateCode randomValidateCode = new randomValidateCode (); try {randomvalidatecode.getrandCode (запрос, ответ "ImageCode"); // метод вывода изображения} catch (Exception e) {e.printStackTrace (); } возвращаться ""; } // проверка кода проверки @requestMapping (value = "/ceckImageCode") @Responsebody public String Checktcode (httpservletrequest, httpservletresponse response) {string valyatecode = request.getParameter ("valyateCode"); String Code = null; // 1: Получить информацию о коде проверки в cookie cookie [] cookie = request.getcookies (); для (cookie cookie: cookie) {if ("ImageCode" .equals (cookie.getName ())) {code = cookie.getValue (); перерыв; }} // 1: получить информацию о проверке сеанса // String Code1 = (String) request.getSession (). GetAttribute (""); // 2: Определите, является ли код проверки правильным if (! StringUtils.isempty (validatecode) && validatecode.equals (code)) {return "ok"; } вернуть "ошибку"; // Я не выполнял проверку нечеткой обработки размера буквы здесь. Если вам интересно, вы можете попробовать это! }}3. randomvalidatecode.java class для генерации кода проверки
пакет com.dufy.javaweb.test; import java.awt.color; импорт java.awt.font; импорт java.awt.graphics; импорт java.awt.image.bufferedimage; импорт java.io.bytearrayoutputeam javax.servlet.http.cookie; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; public class randomvalidatecode {private случайный случайный = new Random (); Private String RandString = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // Случайно сгенерированная строка частная ширина int = 80; // Ширина изображения private int hight = 26; // Высота изображения private int lineize = 40 ;// Число интерференционных линий private int stringnum = 4; // Случайно родовые символы/************************************************************************************************************* Font ("fixedsys", font.center_baseline, 18); } /** Получить цвет* / private color getRandcolor (int fc, int bc) {if (fc> 255) fc = 255; if (bc> 255) bc = 255; int r = fc + random.nextint (bc - fc - 16); int g = fc + random.nextint (bc - fc - 14); int b = fc + random.nextint (bc - fc - 18); вернуть новый цвет (r, g, b); } /** Нарисуйте строку* / приватная строка шнурки (графика g, string randomString, int i) {g.setfont (getFont ()); g.setcolor (новый цвет (случайный.nextint (101), random.nextint (111), случайный .nextint (121))); String rand = string.valueof (getrandomString (random.nextint (randstring.length ()))); RandomString += RAND; g.translate (random.nextint (3), random.nextint (3)); G.DrawString (Rand, 13 * I, 16); вернуть случайное строение; } /** Нарисуйте интерференционную линию* / private void drawline (Graphics g) {int x = random.nextint (width); int y = random.nextint (высота); int xl = random.nextint (13); int yl = random.nextint (15); g.drawline (x, y, x + xl, y + yl); } /** Получить случайные символы* / public String getRandomString (int num) {return string.valueof (randstring.charat (num)); } / *** Сгенерировать случайное изображение* / public void getrandCode (httpservletrequest, httpservletresponse ответ, ключ строки) {// класс BufferedImage - это класс изображения с буфером, а класс изображения - это класс, используемый для описания изображения image = new BufferedImage (width, bufferedImage.ty_nt_bgr); Graphics g = image.getGraphics (); // генерировать графический объект объекта изображения. Вы можете выполнять различные операции рисования на изображении, изменяя объект G.FillRect (0, 0, ширина, высота); g.setfont (новый шрифт («Times New Roman», Font.Roman_baseline, 18)); g.setcolor (getrandcolor (110, 133)); // Нарисуйте интерференционную линию для (int i = 0; i <= linesize; i ++) {drawline (g); } // Нарисуйте случайный символ string randomSting = ""; for (int i = 1; i <= stringNum; i ++) {RandomString = Shorpling (g, RandomString, i); } // 1: поместите случайно сгенерированный код проверки в cookie cookie cookie = new cookie (key, randomstring); response.addcookie (cookie); // 2: Поместите случайно сгенерированный код проверки в строку сеанса sessionId = request.getSession (). GetId (); request.getSession (). setattribute (sessionId+key, randomString); System.out.println ("************" + RandomString); // Сводка: оба метода хороши, // (1): Используйте файлы cookie для отправки проверки кода в передний браузер, что небезопасно! Не рекомендуется для использования. // (2): Использование метода сеанса может решить проблему, что код проверки не отправляется в браузер, что является более безопасным, но если количество пользователей слишком велик, такой метод хранения окажет давление на сервер и повлияет на производительность сервера. Не рекомендуется для использования. // Этот метод временно реализован здесь. Лучший способ сохранения сгенерированного кода проверки в кэше, используемом в проекте, и установить время неверно, что может не только обеспечить безопасность, но и снизить давление на сервер. g.dispose (); try {bytearrayoutputstream tmp = new BytearrayOutputStream (); Imageio.write (Image, "png", TMP); tmp.close (); Integer contentLength = tmp.size (); response.setheader ("Содержимое длины", ContentLength + ""); response.getOutputStream (). write (tmp.tobytearray ()); // выводить изображение в память клиенту в потоке} catch (Exception e) {e.printStackTrace (); } наконец {try {response.getOutputStream (). flush (); response.getOutputStream (). Close (); } catch (Exception e2) {e2.printstackTrace (); }}}} 4. Резюме
Содержание этой статьи заканчивается здесь. Если вы не понимаете содержимое внутри, вы можете оставить сообщение для обсуждения. Я надеюсь, что содержание этой статьи будет полезно для каждого обучения и работы.