




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Spring框架生成圖片驗(yàn)證碼實(shí)例驗(yàn)證碼在很多地方都會(huì)遇到,實(shí)現(xiàn)的方法和形式也有很多,主要的目的就是為了安全,防止一些惡意的攻擊等。今天在之前搭建好的一個(gè)spring框架上寫了一個(gè)驗(yàn)證碼的生成demo,我會(huì)貼出細(xì)節(jié)代碼,但是spring的配置就不在介紹了,有需要的可以參考借鑒。這篇文章會(huì)從前臺(tái)頁面到后臺(tái)實(shí)現(xiàn)完整的講解,下面跟著小編一起來看看。1、前臺(tái)的代碼,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>獲取圖片驗(yàn)證碼</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="輸入驗(yàn)證碼"/> </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();/進(jìn)入頁面就刷新生成驗(yàn)證碼);/* 刷新生成驗(yàn)證碼 */function flushValidateCode()var validateImgObject = document.getElementById("codeValidateImg");validateImgObject.src = "$pageContext.request.contextPath /getSysManageLoginCode?time=&qu
11、ot; + new Date();/*校驗(yàn)驗(yàn)證碼輸入是否正確*/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、后臺(tái)代碼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"/登錄獲取驗(yàn)證碼RequestMapping("/getSysManageLoginCode")ResponseBodypublic String getSysManageLoginCode(HttpServletResponse response,HttpServletRequest request) response.setContentType("image/jpeg&q
15、uot;);/ 設(shè)置相應(yīng)類型,告訴瀏覽器輸出的內(nèi)容為圖片response.setHeader("Pragma", "No-cache");/ 設(shè)置響應(yīng)頭信息,告訴瀏覽器不要緩存此內(nèi)容response.setHeader("Cache-Control", "no-cache");response.setHeader("Set-Cookie", "name=value; HttpOnly");/設(shè)置HttpOnly屬性,防止Xss攻擊response.setDateHeader(
16、"Expire", 0);RandomValidateCode randomValidateCode = new RandomValidateCode();try randomValidateCode.getRandcode(request, response,"imagecode");/ 輸出圖片方法 catch (Exception e) e.printStackTrace();return ""/驗(yàn)證碼驗(yàn)證RequestMapping(value = "/checkimagecode")ResponseBod
17、ypublic String checkTcode(HttpServletRequest request,HttpServletResponse response) String validateCode = request.getParameter("validateCode");String code = null;/1:獲取cookie里面的驗(yàn)證碼信息Cookie cookies = request.getCookies();for (Cookie cookie : cookies) if ("imagecode".equals(cookie.ge
18、tName() code = cookie.getValue();break;/1:獲取session驗(yàn)證碼的信息/String code1 = (String) request.getSession().getAttribute("");/2:判斷驗(yàn)證碼是否正確if(!StringUtils.isEmpty(validateCode) && validateCode.equals(code)return "ok" return "error"/這里我沒有進(jìn)行字母大小模糊的驗(yàn)證處理,感興趣的你可以去試一下!3、生成驗(yàn)證
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"/ 隨機(jī)產(chǎn)生的字符串private int width = 80;/ 圖片寬private int height = 26;/ 圖片高private int lineSize = 40;/ 干擾線數(shù)量private int stringNum = 4;/ 隨機(jī)產(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);/* 獲取隨機(jī)的字符*/public String getRa
25、ndomString(int num) return String.valueOf(randString.charAt(num);/* 生成隨機(jī)圖片*/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對(duì)象的Graphics對(duì)象,改對(duì)象可以在圖像上進(jìn)行各種繪制操作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);/ 繪制隨機(jī)字符String randomString = ""for (int i = 1; i <= stringNum; i+) randomString = drowString(g, randomString, i);/1:將隨機(jī)生成的驗(yàn)證碼放入Cookie中Cookie cookie = new Cookie(key,randomString);response.addCookie(cookie);/2:將隨機(jī)生成的驗(yàn)證碼放入session中String sessio
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 國際關(guān)系學(xué)院《工程力學(xué)與機(jī)械設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 河北環(huán)境工程學(xué)院《護(hù)理學(xué)基礎(chǔ)技術(shù)(一)》2023-2024學(xué)年第二學(xué)期期末試卷
- 南京航空航天大學(xué)金城學(xué)院《細(xì)胞生物學(xué)課程設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣州城市職業(yè)學(xué)院《戰(zhàn)略管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣東新安職業(yè)技術(shù)學(xué)院《生物化學(xué)及實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 長春師范大學(xué)《汽車底盤構(gòu)造與維修》2023-2024學(xué)年第二學(xué)期期末試卷
- 山西華澳商貿(mào)職業(yè)學(xué)院《移動(dòng)通信技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 大學(xué)生畢業(yè)實(shí)習(xí)計(jì)劃
- 大一新生軍訓(xùn)心得感悟(28篇)
- 農(nóng)村亂占耕地建房問題整治工作匯報(bào)范文(3篇)
- 歸檔文件整理規(guī)則
- 外研社一起英語四年級(jí)下冊(cè)課文
- 學(xué)校辦公室主任述職報(bào)告
- 《列夫·托爾斯泰》-完整版PPT
- 高考古代詩歌鑒賞復(fù)習(xí)教案
- 負(fù)數(shù)的認(rèn)識(shí)1202
- 中國鐵塔建設(shè)維護(hù)工作培訓(xùn)PPT通用通用課件
- 新視野大學(xué)英語第三版Book 2 Unit 1 Text A
- 醫(yī)療設(shè)備清單
- SHD干燥機(jī)說明書(英)
- 藍(lán)色卡通風(fēng)格研學(xué)旅行報(bào)告PPT講座學(xué)習(xí)
評(píng)論
0/150
提交評(píng)論