日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

SpringBoot 圖形驗證碼的生成和校驗

瀏覽:23日期:2023-03-09 09:53:12
目錄1. 編寫工具類2. 編寫 Controller 中的接口3. 獲取驗證碼圖片另一種方法1.添加依賴2.全部代碼1. 編寫工具類

package com.cn.beauty.util;import org.slf4j.Logger;import org.slf4j.LoggerFactory;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.util.ArrayList;import java.util.Random;public class RandomValidateCodeUtil { public static final String RANDOMCODEKEY = 'MEISHANG-LOGIN-RANDOMVALIDATECODEKEY';//放到session中的key private String randString = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';//隨機產(chǎn)生數(shù)字與字母組合的字符串 private int width = 95;// 圖片寬 private int height = 40;// 圖片高 private int stringNum = 4;// 隨機產(chǎn)生字符數(shù)量 private static final Logger logger = LoggerFactory.getLogger(RandomValidateCodeUtil.class); private Random random = new Random(); /** * 獲得字體 */ private Font getFont() {return new Font('Wide Latin', Font.PLAIN, 18); } /** * 獲得顏色(粉色為主) */ private Color getRandColor() {ArrayList<Color> colors = new ArrayList<Color>();colors.add(new Color(241, 158, 194));colors.add(new Color(255, 94, 226));colors.add(new Color(255, 156, 177));colors.add(new Color(245, 152, 217));colors.add(new Color(255, 85, 81));colors.add(new Color(245, 152, 251));int num = random.nextInt(6);return colors.get(num); } /** * 生成隨機圖片 */ public void getRandcode(HttpServletRequest request, HttpServletResponse response) {HttpSession session = request.getSession();// BufferedImage類是具有緩沖區(qū)的Image類,Image類是用于描述圖像信息的類BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);Graphics g = image.getGraphics();// 產(chǎn)生Image對象的Graphics對象,改對象可以在圖像上進行各種繪制操作g.fillRect(0, 0, width, height);//圖片大小g.setFont(new Font('Wide Latin', Font.PLAIN, 18));//字體大小g.setColor(getRandColor());//字體顏色// 添加噪點float yawpRate = 0.01f;// 噪聲率int area = (int) (yawpRate * width * height);for (int i = 0; i < area; i++) { int x = random.nextInt(width); int y = random.nextInt(height); image.setRGB(x, y, random.nextInt(255));}// 繪制隨機字符String randomString = '';for (int i = 1; i <= stringNum; i++) { randomString = drowString(g, randomString, i);}logger.info(randomString);//將生成的隨機字符串保存到session中session.removeAttribute(RANDOMCODEKEY);session.setAttribute(RANDOMCODEKEY, randomString);g.dispose();try { // 將內(nèi)存中的圖片通過流動形式輸出到客戶端 ImageIO.write(image, 'JPEG', response.getOutputStream());} catch (Exception e) { logger.error('將內(nèi)存中的圖片通過流動形式輸出到客戶端失敗>>>> ', e);} } /** * 繪制字符串 */ private String drowString(Graphics g, String randomString, int i) {g.setFont(getFont());g.setColor(getRandColor());String rand = String.valueOf(getRandomString(random.nextInt(randString.length())));randomString += rand;g.translate(random.nextInt(3), random.nextInt(3));g.drawString(rand, 20 * (i - 1) + 3, 25);return randomString; } /** * 獲取隨機的字符 */ public String getRandomString(int num) {return String.valueOf(randString.charAt(num)); }}2. 編寫 Controller 中的接口

/** * @description 生成驗證碼 */@RequestMapping(value = '/user/getVerify')public void getVerify(HttpServletRequest request, HttpServletResponse response) { try {//設置相應類型,告訴瀏覽器輸出的內(nèi)容為圖片response.setContentType('image/jpeg');//設置響應頭信息,告訴瀏覽器不要緩存此內(nèi)容response.setHeader('Pragma', 'No-cache');response.setHeader('Cache-Control', 'no-cache');response.setDateHeader('Expire', 0);RandomValidateCodeUtil randomValidateCode = new RandomValidateCodeUtil();//輸出驗證碼圖片方法randomValidateCode.getRandcode(request, response); } catch (Exception e) {log.error('獲取驗證碼失敗>>>>', e); }}/** * @description 校驗驗證碼 */@PostMapping('/user/checkVerify')public boolean checkVerify(@RequestParam String verifyInput, HttpSession session) { try {// 從session中獲取隨機數(shù)String inputStr = verifyInput;String random = (String) session.getAttribute('MEISHANG-LOGIN-RANDOMVALIDATECODEKEY');if (random == null) { return false;}if (random.equalsIgnoreCase(inputStr)) { return true;} else { return false;} } catch (Exception e) {log.error('驗證碼校驗失敗', e);return false; }}3. 獲取驗證碼圖片

訪問獲取驗證碼接口

http://127.0.0.1:8605/user/getVerify

效果如下

SpringBoot 圖形驗證碼的生成和校驗

另一種方法1.添加依賴

<dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptcha</artifactId> <version>2.3.2</version></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>

項目結(jié)構

SpringBoot 圖形驗證碼的生成和校驗

2.全部代碼

UserController

package com.yzm.config;import java.util.HashMap;import javax.annotation.Resource;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import com.google.code.kaptcha.impl.DefaultKaptcha;import com.yzm.utils.Util;@Controllerpublic class TestControler { @Resource private DefaultKaptcha captchaProducer; /** * 登錄驗證碼SessionKey */ public static final String LOGIN_VALIDATE_CODE = 'login_validate_code'; /** * 登錄驗證碼圖片 */ @RequestMapping(value = {'/loginValidateCode'}) public void loginValidateCode(HttpServletRequest request, HttpServletResponse response) throws Exception{Util.validateCode(request,response,captchaProducer,LOGIN_VALIDATE_CODE); } /** * 檢查驗證碼是否正確 */ @RequestMapping('/checkLoginValidateCode') @ResponseBody public HashMap checkLoginValidateCode(HttpServletRequest request,@RequestParam('validateCode')String validateCode) {String loginValidateCode = request.getSession().getAttribute(LOGIN_VALIDATE_CODE).toString();HashMap<String,Object> map = new HashMap<String,Object>();if(loginValidateCode == null){ map.put('status',null);//驗證碼過期}else if(loginValidateCode.equals(validateCode)){ map.put('status',true);//驗證碼正確}else if(!loginValidateCode.equals(validateCode)){ map.put('status',false);//驗證碼不正確}map.put('code',200);return map; }}package com.yzm.controller;import java.util.Properties;import org.springframework.context.annotation.Bean;import org.springframework.stereotype.Component;import com.google.code.kaptcha.impl.DefaultKaptcha;import com.google.code.kaptcha.util.Config;@Componentpublic class TestConfig { @Bean public DefaultKaptcha getDefaultKaptcha() {DefaultKaptcha defaultKaptcha = new DefaultKaptcha();Properties properties = new Properties();// 圖片邊框properties.setProperty('kaptcha.border', 'no');// 邊框顏色properties.setProperty('kaptcha.border.color', 'black');//邊框厚度properties.setProperty('kaptcha.border.thickness', '1');// 圖片寬properties.setProperty('kaptcha.image.width', '200');// 圖片高properties.setProperty('kaptcha.image.height', '50');//圖片實現(xiàn)類properties.setProperty('kaptcha.producer.impl', 'com.google.code.kaptcha.impl.DefaultKaptcha');//文本實現(xiàn)類properties.setProperty('kaptcha.textproducer.impl', 'com.google.code.kaptcha.text.impl.DefaultTextCreator');//文本集合,驗證碼值從此集合中獲取properties.setProperty('kaptcha.textproducer.char.string', '01234567890');//驗證碼長度properties.setProperty('kaptcha.textproducer.char.length', '4');//字體properties.setProperty('kaptcha.textproducer.font.names', '宋體');//字體顏色properties.setProperty('kaptcha.textproducer.font.color', 'black');//文字間隔properties.setProperty('kaptcha.textproducer.char.space', '5');//干擾實現(xiàn)類properties.setProperty('kaptcha.noise.impl', 'com.google.code.kaptcha.impl.DefaultNoise');//干擾顏色properties.setProperty('kaptcha.noise.color', 'blue');//干擾圖片樣式properties.setProperty('kaptcha.obscurificator.impl', 'com.google.code.kaptcha.impl.WaterRipple');//背景實現(xiàn)類properties.setProperty('kaptcha.background.impl', 'com.google.code.kaptcha.impl.DefaultBackground');//背景顏色漸變,結(jié)束顏色properties.setProperty('kaptcha.background.clear.to', 'white');//文字渲染器properties.setProperty('kaptcha.word.impl', 'com.google.code.kaptcha.text.impl.DefaultWordRenderer');Config config = new Config(properties);defaultKaptcha.setConfig(config);return defaultKaptcha; } }

Util

package com.yzm.utils;import java.awt.image.BufferedImage;import javax.imageio.ImageIO;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.google.code.kaptcha.impl.DefaultKaptcha;public class Util { /** * 生成驗證碼圖片 * @param request 設置session * @param response 轉(zhuǎn)成圖片 * @param captchaProducer 生成圖片方法類 * @param validateSessionKey session名稱 * @throws Exception */ public static void validateCode(HttpServletRequest request, HttpServletResponse response, DefaultKaptcha captchaProducer, String validateSessionKey) throws Exception{// Set to expire far in the past.response.setDateHeader('Expires', 0);// Set standard HTTP/1.1 no-cache headers.response.setHeader('Cache-Control', 'no-store, no-cache, must-revalidate');// Set IE extended HTTP/1.1 no-cache headers (use addHeader).response.addHeader('Cache-Control', 'post-check=0, pre-check=0');// Set standard HTTP/1.0 no-cache header.response.setHeader('Pragma', 'no-cache'); // return a jpegresponse.setContentType('image/jpeg'); // create the text for the imageString capText = captchaProducer.createText(); // store the text in the sessionrequest.getSession().setAttribute(validateSessionKey, capText); // create the image with the textBufferedImage bi = captchaProducer.createImage(capText); ServletOutputStream out = response.getOutputStream(); // write the data outImageIO.write(bi, 'jpg', out);try { out.flush();} finally { out.close();} }}

以上就是SpringBoot 圖形驗證碼的生成和校驗的詳細內(nèi)容,更多關于SpringBoot 驗證碼的生成和校驗的資料請關注好吧啦網(wǎng)其它相關文章!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲欧美日韩国产一区二区| 国产精品任我爽爆在线播放| 里番精品3d一二三区| 精品亚洲二区| 亚洲v在线看| 国产日韩专区| 久久狠狠久久| 免费在线小视频| 老鸭窝亚洲一区二区三区| 日韩在线电影| 久久久久黄色| 成人国产精选| 老鸭窝毛片一区二区三区| 日本三级亚洲精品| 国产成人免费精品| 欧美+亚洲+精品+三区| 日韩三级精品| 日韩欧美字幕| 日韩av中文字幕一区二区三区| 国产中文欧美日韩在线| 国产精品88久久久久久| 97精品资源在线观看| 日韩av福利| 日本高清久久| 日韩电影免费在线观看| 三级欧美韩日大片在线看| 国产精品传媒麻豆hd| 免费视频一区三区| 国产日韩在线观看视频| 亚洲天堂黄色| 欧美国产亚洲精品| 免费看黄色91| 中文字幕在线视频久| 另类av一区二区| 国产成人久久精品麻豆二区 | 亚洲欧美久久久| 美女久久99| 亚洲久久一区| 久久久五月天| **爰片久久毛片| jiujiure精品视频播放| 美女视频一区在线观看| 国产视频一区欧美| 精品一区二区三区免费看| 免费观看在线综合| 香蕉视频亚洲一级| 国产精品九九| 三级亚洲高清视频| 久久免费黄色| 国产精品1区| 日韩影院免费视频| 深夜视频一区二区| 国产精品成人自拍| 亚洲精品激情| 欧美日韩黑人| 蜜臀久久精品| 国产一区三区在线播放| 奇米狠狠一区二区三区| 亚洲深爱激情| 国产在线不卡| 在线看片国产福利你懂的| 欧美有码在线| 男人的天堂亚洲一区| 国产99精品一区| 福利一区二区免费视频 | 野花国产精品入口| 日韩高清成人| 精品久久精品| 国产精品一区二区av日韩在线| 蜜桃视频第一区免费观看| 国内精品福利| 成人久久久久| 最近高清中文在线字幕在线观看1| 国产精品一区二区99| 日韩av网站在线观看| 中文视频一区| 日韩和欧美一区二区| 三级欧美在线一区| 视频一区二区不卡| 伊人久久亚洲热| 99久久激情| 欧美日韩一二| 99久久视频| 欧美日一区二区| 久久精品卡一| 久久久一二三| 亚洲一本视频| 亚州av乱码久久精品蜜桃| 国产一区二区中文| 1000部精品久久久久久久久| 国产99亚洲| 激情五月色综合国产精品| 日韩欧美不卡| 国产亚洲一区二区手机在线观看| 激情久久一区二区| 日本一区二区免费高清| 韩国一区二区三区视频| 成人影视亚洲图片在线| 日韩欧美三级| 99精品综合| 一本一道久久a久久精品蜜桃| 欧美手机在线| 欧美日韩国产精品一区二区亚洲| 国产精品97| 日韩在线卡一卡二| 日韩精品欧美精品| 国产精品白丝av嫩草影院| 蜜桃久久久久| 色综合狠狠操| 99精品电影| 久久国产精品久久久久久电车| 视频一区视频二区中文| 亚洲精品无播放器在线播放| 日本不卡高清视频| 国产精品s色| 国产中文欧美日韩在线| 欧美日韩国产v| 亚洲激情婷婷| 日韩在线网址| 精品伊人久久| 久久要要av| 蜜桃久久久久久| 欧美日本二区| 精品国产aⅴ| 涩涩av在线| 99亚洲精品| 91成人小视频| 精品无人区麻豆乱码久久久| 在线手机中文字幕| 黄色成人在线网址| 97久久超碰| 日韩国产一区二区| 久久午夜影视| 国产毛片久久久| 成人日韩在线观看| 亚洲无线观看| 久久这里只有精品一区二区| 亚洲天堂免费电影| 亚洲一级大片| 国模精品一区| 热久久国产精品| zzzwww在线看片免费| 99日韩精品| 久久精品福利| 亚洲一区久久| 欧美激情五月| 日韩午夜一区| 国产激情久久| 在线一区视频| 久久av免费| 亚洲欧美日本日韩| 卡一卡二国产精品| 午夜宅男久久久| 精品久久免费| 视频一区日韩| 日韩不卡在线| 国产精选一区| 欧美亚洲国产一区| 国产精品亚洲成在人线| 久久精品国产68国产精品亚洲| 日产欧产美韩系列久久99| 天堂av在线| 欧美日韩精品一区二区三区视频| 久久久9色精品国产一区二区三区| 日韩精品久久久久久久软件91| 日本精品影院| 国产麻豆精品久久| 日韩精品一二区| 欧美a级片一区| 精品国产美女a久久9999| 免费视频一区二区| 国产精品久久久久av电视剧| 久久激五月天综合精品| 在线亚洲观看| 蜜桃av在线播放| 欧美激情综合| 综合激情网...| 欧美日韩在线观看视频小说| 精品国产乱码久久久| 亚洲日产国产精品| 欧美69视频| 免费福利视频一区二区三区| 国产精品久久久免费| 亚欧洲精品视频在线观看| 男人的天堂久久精品| 午夜av一区| 婷婷色综合网| 999国产精品永久免费视频app| 麻豆视频在线看| 国产精品a久久久久| 欧美日韩一视频区二区| 日韩综合一区二区| 日本在线一区二区三区| 亚洲精品乱码| 亚洲精品在线二区| 五月国产精品| 日本久久二区| 日韩欧美美女在线观看| 欧美亚洲tv| 久久国产乱子精品免费女|