1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 后端图形验证码base64编码字符串及前端获取图形验证码base64编码字符串并解码显示图形

后端图形验证码base64编码字符串及前端获取图形验证码base64编码字符串并解码显示图形

时间:2019-04-13 11:40:56

相关推荐

后端图形验证码base64编码字符串及前端获取图形验证码base64编码字符串并解码显示图形

后端生成图形验证码,并进行base64编码生成字符串传至前端,由前端解码显示图形验证码,代码如下:

后端-获取图形验证码base64编码字符串接口:

/*** @param response* @return map* @throws Exception 获取图形验证码接口*/@RequestMapping("/getVerifyCode")@ResponseBodypublic Map getVerifyCode(HttpServletResponse response) throws Exception {Map map = new HashMap();//第一个参数是生成的验证码,第二个参数是生成的图片Object[] objs = VerifyUtil.createImage();//将图片输出给浏览器BufferedImage image = (BufferedImage) objs[1];String value = objs[0].toString().toLowerCase();String key = UUID.randomUUID().toString();redisUtils.set(key, value, 2, MINUTES);ByteArrayOutputStream outputStream = new ByteArrayOutputStream();// 使用ServletOutputStream流可直接输出图片// ServletOutputStream outputStream = response.getOutputStream();ImageIO.write(image, "png", outputStream);Base64 base64 = new Base64();String pic = new String(base64.encode(outputStream.toByteArray()));map.put("codeKey", key);map.put("codePic", pic);return map;}

后端-生成图形验证码工具类

import java.awt.*;import java.awt.image.BufferedImage;import java.util.Random;/*** @param* @desc 图形验证码生成**/public class VerifyUtil {// 验证码字符集private static final char[] chars = {'1', '2', '3', '4', '5', '6', '7', '8', '9','a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'm', 'n','p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z','A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N','P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};// 字符数量private static final int SIZE = 4;// 干扰线数量private static final int LINES = 4;// 宽度private static final int WIDTH = 83;// 高度private static final int HEIGHT = 40;// 字体大小private static final int FONT_SIZE = 30;private static int[] w = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};/*** 生成随机验证码及图片* Object[0]:验证码字符串;* Object[1]:验证码图片。*/public static Object[] createImage() {StringBuffer sb = new StringBuffer();// 1.创建空白图片BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);// 2.获取图片画笔Graphics graphic = image.getGraphics();// 3.设置画笔颜色graphic.setColor(Color.LIGHT_GRAY);// 4.绘制矩形背景graphic.fillRect(0, 0, WIDTH, HEIGHT);// 5.画随机字符Random ran = new Random();for (int i = 0; i <SIZE; i++) {// 取随机字符索引int n = ran.nextInt(chars.length);// 设置随机颜色graphic.setColor(getRandomColor());// 设置字体大小graphic.setFont(new Font(null, Font.BOLD + Font.ITALIC, FONT_SIZE));// 画字符graphic.drawString(chars[n] + "", i * WIDTH / SIZE, HEIGHT*2/3);// 记录字符sb.append(chars[n]);}// 6.画干扰线for (int i = 0; i < LINES; i++) {// 设置随机颜色graphic.setColor(getRandomColor());// 随机画线graphic.drawLine(ran.nextInt(WIDTH), ran.nextInt(HEIGHT),ran.nextInt(WIDTH), ran.nextInt(HEIGHT));}// 7.返回验证码和图片return new Object[]{sb.toString(), image};}/*** 随机取色*/public static Color getRandomColor() {Random ran = new Random();Color color = new Color(ran.nextInt(256),ran.nextInt(256), ran.nextInt(256));return color;}}

前端-访问获取图形验证码base64编码字符串接口,并解码显示图形验证码

<script src="/wjxcx/jquery.min.js"></script><img id="randomImage" title="点击更换" id="imgcode" οnclick="javascript:refreshimg();" src="" /><script type="text/javascript">$(function(){refreshimg();})function refreshimg() {$.ajax({type : "post",dataType : "json",url : "/wjxcx/common/getKeyCode",data : {},success : function(data){$('#randomImage').attr('src', 'data:image/png;base64,'+data.codePic);},error : function(){}});}</script>

借鉴文章:

/fengbonu/article/details/78813094

/u010407050/article/details/52046820

可使用以下网站测试:

在线加密解密(采用Crypto-JS实现):

/encrypt?type=4

后端图形验证码base64编码字符串及前端获取图形验证码base64编码字符串并解码显示图形验证码代码

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。