這篇文章主要為大家展示了“JSP如何實現(xiàn)頁面驗證碼”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“JSP如何實現(xiàn)頁面驗證碼”這篇文章吧。
成都創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、網(wǎng)站設(shè)計、外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的上街網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
首先在JSP頁面加上生成圖片的鏈接
,src需要我們自己實現(xiàn),實現(xiàn)邏輯如下
運行后,jsp頁面會發(fā)出"auth/code"請求生成驗證碼,并將驗證碼放置于session中用于驗證,運行效果如下
我們在jsp頁面上加上輸入驗證碼的輸入框及提交按鈕,點擊按鈕后進行驗證碼判斷
后臺會比將收入的驗證碼與放置于session中的驗證碼進行比對,并輸出結(jié)果給JSP頁面進行相應(yīng)處理,當(dāng)判斷為失敗,則刷新驗證碼
最后,相對完整的頁面和邏輯都已實現(xiàn),代碼如下
JSP頁面代碼
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %> <%@ page import="java.util.*" %>后臺代碼Title <%----%>
package com.founderit.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import javax.imageio.ImageIO; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.awt.*; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; @Controller @RequestMapping("auth") public class Auth { private char[] codeSequence = { 'A', '1','B', 'C', '2','D','3', 'E','4', 'F', '5','G','6', 'H', '7','I', '8','J', 'K', '9' ,'L', '1','M', '2','N', 'P', '3', 'Q', '4', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; @RequestMapping("authCode") public void getCode(HttpServletResponse response, HttpSession session) throws IOException { int width = 63; int height = 37; Random random = new Random(); //設(shè)置response頭信息 //禁止緩存 response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); //生成緩沖區(qū)image類 BufferedImage image = new BufferedImage(width, height, 1); //產(chǎn)生image類的Graphics用于繪制操作 Graphics g = image.getGraphics(); //Graphics類的樣式 g.setColor(this.getColor(200, 250)); g.setFont(new Font("Times New Roman",0,28)); g.fillRect(0, 0, width, height); //繪制干擾線 for(int i=0;i<40;i++){ g.setColor(this.getColor(130, 200)); int x = random.nextInt(width); int y = random.nextInt(height); int x1 = random.nextInt(12); int y1 = random.nextInt(12); g.drawLine(x, y, x + x1, y + y1); } //繪制字符 String strCode = ""; for(int i=0;i<4;i++){ String rand = String.valueOf(codeSequence[random.nextInt(codeSequence.length)]); strCode = strCode + rand; g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110))); g.drawString(rand, 13*i+6, 28); } //將字符保存到session中用于前端的驗證 session.setAttribute("authCode", strCode.toLowerCase()); g.dispose(); ImageIO.write(image, "JPEG", response.getOutputStream()); response.getOutputStream().flush(); } public Color getColor(int fc,int bc){ Random random = new Random(); if(fc>255) fc = 255; if(bc>255) bc = 255; int r = fc + random.nextInt(bc - fc); int g = fc + random.nextInt(bc - fc); int b = fc + random.nextInt(bc - fc); return new Color(r,g,b); } @RequestMapping(value = "checkCode",method = RequestMethod.POST) @ResponseBody public String checkAuthCode(@RequestParam(value = "inputCode") String inputCode, HttpServletRequest request){ String checkCode=(String) request.getSession().getAttribute("authCode"); //返回1 代表判斷通過,0代表失敗 String isCode=checkCode.equals(inputCode)?"1":"0"; return isCode; } }
以上是“JSP如何實現(xiàn)頁面驗證碼”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!