java验证码的实现
生活随笔
收集整理的這篇文章主要介紹了
java验证码的实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先java代碼生成驗證碼:
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody;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.HashMap; import java.util.Map; import java.util.Random;@Controller @RequestMapping("/backend/code") public class CodeController {@RequestMapping("/image")public void image(HttpServletRequest request, HttpServletResponse response) throws IOException {request.setCharacterEncoding("utf-8");BufferedImage bfi = new BufferedImage(80, 25, BufferedImage.TYPE_INT_RGB);Graphics g = bfi.getGraphics();g.fillRect(0, 0, 80, 25);//驗證碼字符范圍char[] ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".toCharArray();Random r = new Random();int index;StringBuffer sb = new StringBuffer(); //保存字符串for (int i = 0; i < 4; i++) {index = r.nextInt(ch.length);g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)));Font font = new Font("宋體", 30, 20);g.setFont(font);g.drawString(ch[index] + "", (i * 20) + 2, 23);sb.append(ch[index]);}// 添加噪點int area = (int) (0.02 * 60 * 25);for (int i = 0; i < area; ++i) {int x = (int) (Math.random() * 80);int y = (int) (Math.random() * 25);bfi.setRGB(x, y, (int) (Math.random() * 255));}//設置驗證碼中的干擾線for (int i = 0; i < 3; i++) {//隨機獲取干擾線的起點和終點int xstart = (int) (Math.random() * 80);int ystart = (int) (Math.random() * 25);int xend = (int) (Math.random() * 80);int yend = (int) (Math.random() * 25);g.setColor(interLine(1, 255));g.drawLine(xstart, ystart, xend, yend);}HttpSession session = request.getSession(); //保存到sessionsession.setAttribute("verificationCode", sb.toString());ImageIO.write(bfi, "JPG", response.getOutputStream()); //寫到輸出流}private static Color interLine(int Low, int High) {if (Low > 255)Low = 255;if (High > 255)High = 255;if (Low < 0)Low = 0;if (High < 0)High = 0;int interval = High - Low;int r = Low + (int) (Math.random() * interval);int g = Low + (int) (Math.random() * interval);int b = Low + (int) (Math.random() * interval);return new Color(r, g, b);}}?前臺驗證碼寫法:
<div class="col-sm-2"> <!-- 驗證碼 --><img class="img-rounded" src="${pageContext.request.contextPath}/backend/code/image" id="randCode" style="height: 32px; width: 70px;"/> </div><div class="col-sm-2"><button type="button" class="btn btn-link" onclick="reloadImage()">看不清</button> </div>刷新驗證碼的js寫法:
//重新加載驗證碼function reloadImage(){$('#randCode').attr('src','${pageContext.request.contextPath}/backend/code/image?time='+new Date().getTime());$('#code').val('');}$(function(){$('#frmLogin').bootstrapValidator({feedbackIcons: {valid: 'glyphicon glyphicon-ok',invalid: 'glyphicon glyphicon-remove',validating: 'glyphicon glyphicon-refresh'},fields:{loginName:{validators:{notEmpty:{message:'用戶名不能為空'}}},password:{validators:{notEmpty:{message:'密碼不能為空'}}},code:{validators:{notEmpty:{message:'請輸入驗證碼'},remote:{url:'${pageContext.request.contextPath}/backend/code/checkCode',message:'驗證碼不正確'}}}}});?驗證碼后臺校驗的話,就是去session獲取報錯的驗證碼進行校驗。
@RequestMapping("/checkCode")@ResponseBodypublic Map<String,Object> checkCode(String code,HttpSession session){Map<String,Object> map=new HashMap<>();String verificationCode = (String) session.getAttribute("verificationCode");if(verificationCode.equalsIgnoreCase(code)){map.put("valid",true);}else{map.put("valid",false);}return map;}?
總結
以上是生活随笔為你收集整理的java验证码的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 路由器该怎么选-家庭如何选择路由器
- 下一篇: 津南区房子为什么那么便宜(天津哪个区买房