Spring框架生成圖片驗證碼實例_第1頁
Spring框架生成圖片驗證碼實例_第2頁
Spring框架生成圖片驗證碼實例_第3頁
Spring框架生成圖片驗證碼實例_第4頁
Spring框架生成圖片驗證碼實例_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Spring框架生成圖片驗證碼實例驗證碼在很多地方都會遇到,實現(xiàn)的方法和形式也有很多,主要的目的就是為了安全,防止一些惡意的攻擊等。今天在之前搭建好的一個spring框架上寫了一個驗證碼的生成demo,我會貼出細節(jié)代碼,但是spring的配置就不在介紹了,有需要的可以參考借鑒。這篇文章會從前臺頁面到后臺實現(xiàn)完整的講解,下面跟著小編一起來看看。1、前臺的代碼,image.jsp?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859&

2、lt;% page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" <html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8&

3、quot;><title>獲取圖片驗證碼</title><script type="text/javascript" src="$pageContext.request.contextPath /static/js/jquery-1.10.2.min.js"></script></head><body><form action="#" method='post'><input type="hidden"

4、id="userId" name="userId" value=""> <div class="form-group"><div class="email controls"><input type="text" name='loginName' id="loginName" placeholder="用戶名" value="" class='form-co

5、ntrol'/></div></div><div class="form-group"><div class="pw controls"><input type="password" autocomplete="off" id="pwd" name="pwd" placeholder="密碼" class='form-control'/></div><

6、;/div><div class="form-group"><div class="email controls"><input id="validateCode" onblur="checkImg(this.value)" name="validateCode" type="text" class="form-control" placeholder="輸入驗證碼"/> </div>

7、;<span class="y_yzimg"><img id="codeValidateImg" onClick="javascript:flushValidateCode();"/></span><p class="y_change"><a href="javascript:flushValidateCode();" >換一張</a></p></div><div class="for

8、m-group"><span class="text-danger"></span></div><div class="submit"><div class="remember"><input type="checkbox" name="remember" value="1" class='icheck-me' data-skin="square" data-

9、color="blue" id="remember"><label for="remember">記住我</label></div><input type="button" value="登錄" onclick="javascript:submitForm();" class='btn btn-primary'></div></form><script type="t

10、ext/javascript">$(document).ready(function() flushValidateCode();/進入頁面就刷新生成驗證碼);/* 刷新生成驗證碼 */function flushValidateCode()var validateImgObject = document.getElementById("codeValidateImg");validateImgObject.src = "$pageContext.request.contextPath /getSysManageLoginCode?time=&qu

11、ot; + new Date();/*校驗驗證碼輸入是否正確*/function checkImg(code)var url = "$pageContext.request.contextPath/checkimagecode"$.get(url,"validateCode":code,function(data)if(data="ok")alert("ok!")elsealert("error!")flushValidateCode();)</script></body>

12、;</html>2、后臺代碼ImageGenController.java?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748package com.dufyun.springmvc.web.controller;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;i

13、mport org.springframework.stereotype.Controller;import org.springframework.util.StringUtils;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import com.dufy.javaweb.test.RandomValidateCode;Controllerpublic class ImageGenControl

14、ler RequestMapping(value="/toImg")public String toImg()return "image/image"/登錄獲取驗證碼RequestMapping("/getSysManageLoginCode")ResponseBodypublic String getSysManageLoginCode(HttpServletResponse response,HttpServletRequest request) response.setContentType("image/jpeg&q

15、uot;);/ 設置相應類型,告訴瀏覽器輸出的內容為圖片response.setHeader("Pragma", "No-cache");/ 設置響應頭信息,告訴瀏覽器不要緩存此內容response.setHeader("Cache-Control", "no-cache");response.setHeader("Set-Cookie", "name=value; HttpOnly");/設置HttpOnly屬性,防止Xss攻擊response.setDateHeader(

16、"Expire", 0);RandomValidateCode randomValidateCode = new RandomValidateCode();try randomValidateCode.getRandcode(request, response,"imagecode");/ 輸出圖片方法 catch (Exception e) e.printStackTrace();return ""/驗證碼驗證RequestMapping(value = "/checkimagecode")ResponseBod

17、ypublic String checkTcode(HttpServletRequest request,HttpServletResponse response) String validateCode = request.getParameter("validateCode");String code = null;/1:獲取cookie里面的驗證碼信息Cookie cookies = request.getCookies();for (Cookie cookie : cookies) if ("imagecode".equals(cookie.ge

18、tName() code = cookie.getValue();break;/1:獲取session驗證碼的信息/String code1 = (String) request.getSession().getAttribute("");/2:判斷驗證碼是否正確if(!StringUtils.isEmpty(validateCode) && validateCode.equals(code)return "ok" return "error"/這里我沒有進行字母大小模糊的驗證處理,感興趣的你可以去試一下!3、生成驗證

19、碼的工具類RandomValidateCode.java?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798package com.dufy.javaweb.test;import java.awt.Color;import java.awt.Font;import java

20、.awt.Graphics;import java.awt.image.BufferedImage;import java.io.ByteArrayOutputStream;import java.util.Random;import javax.imageio.ImageIO;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class RandomValidateCode priv

21、ate Random random = new Random();private String randString = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"/ 隨機產(chǎn)生的字符串private int width = 80;/ 圖片寬private int height = 26;/ 圖片高private int lineSize = 40;/ 干擾線數(shù)量private int stringNum = 4;/ 隨機產(chǎn)生字符數(shù)量/* 獲得字體*/private Font getFont() return new Font("F

22、ixedsys", 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);return new Color(r, g, b);/* 繪制

23、字符串*/private String drowString(Graphics g, String randomString, int i) g.setFont(getFont();g.setColor(new Color(random.nextInt(101), random.nextInt(111), random.nextInt(121);String rand = String.valueOf(getRandomString(random.nextInt(randString.length();randomString += rand;g.translate(random.nextIn

24、t(3), random.nextInt(3);g.drawString(rand, 13 * i, 16);return randomString;/* 繪制干擾線*/private void drowLine(Graphics g) int x = random.nextInt(width);int y = random.nextInt(height);int xl = random.nextInt(13);int yl = random.nextInt(15);g.drawLine(x, y, x + xl, y + yl);/* 獲取隨機的字符*/public String getRa

25、ndomString(int num) return String.valueOf(randString.charAt(num);/* 生成隨機圖片*/public void getRandcode(HttpServletRequest request,HttpServletResponse response,String key) / BufferedImage類是具有緩沖區(qū)的Image類,Image類是用于描述圖像信息的類BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_BGR);Gra

26、phics g = image.getGraphics();/ 產(chǎn)生Image對象的Graphics對象,改對象可以在圖像上進行各種繪制操作g.fillRect(0, 0, width, height);g.setFont(new Font("Times New Roman", Font.ROMAN_BASELINE, 18);g.setColor(getRandColor(110, 133);/ 繪制干擾線for (int i = 0; i <= lineSize; i+) drowLine(g);/ 繪制隨機字符String randomString = ""for (int i = 1; i <= stringNum; i+) randomString = drowString(g, randomString, i);/1:將隨機生成的驗證碼放入Cookie中Cookie cookie = new Cookie(key,randomString);response.addCookie(cookie);/2:將隨機生成的驗證碼放入session中String sessio

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論