电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

瀏覽:5日期: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';//隨機產生數字與字母組合的字符串 private int width = 95;// 圖片寬 private int height = 40;// 圖片高 private int stringNum = 4;// 隨機產生字符數量 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類是具有緩沖區的Image類,Image類是用于描述圖像信息的類BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);Graphics g = image.getGraphics();// 產生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 { // 將內存中的圖片通過流動形式輸出到客戶端 ImageIO.write(image, 'JPEG', response.getOutputStream());} catch (Exception e) { logger.error('將內存中的圖片通過流動形式輸出到客戶端失敗>>>> ', 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 {//設置相應類型,告訴瀏覽器輸出的內容為圖片response.setContentType('image/jpeg');//設置響應頭信息,告訴瀏覽器不要緩存此內容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中獲取隨機數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>

項目結構

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');//圖片實現類properties.setProperty('kaptcha.producer.impl', 'com.google.code.kaptcha.impl.DefaultKaptcha');//文本實現類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');//干擾實現類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');//背景實現類properties.setProperty('kaptcha.background.impl', 'com.google.code.kaptcha.impl.DefaultBackground');//背景顏色漸變,結束顏色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 轉成圖片 * @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 圖形驗證碼的生成和校驗的詳細內容,更多關于SpringBoot 驗證碼的生成和校驗的資料請關注好吧啦網其它相關文章!

標簽: Spring
相關文章:
主站蜘蛛池模板: 肉嫩度仪-凝胶测试仪-国产质构仪-气味分析仪-上海保圣实业发展有限公司|总部 | 科研ELISA试剂盒,酶联免疫检测试剂盒,昆虫_植物ELISA酶免试剂盒-上海仁捷生物科技有限公司 | 河南包装袋厂家_河南真空袋批发价格_河南服装袋定制-恒源达包装制品 | 英国雷迪地下管线探测仪-雷迪RD8100管线仪-多功能数字听漏仪-北京迪瑞进创科技有限公司 | 365文案网_全网创意文案句子素材站 | 免费网站网址收录网_海企优网站推荐平台 | 铝扣板-铝方通-铝格栅-铝条扣板-铝单板幕墙-佳得利吊顶天花厂家 elisa试剂盒价格-酶联免疫试剂盒-猪elisa试剂盒-上海恒远生物科技有限公司 | 税筹星_灵活用工平台_企业财务顾问_财税法薪综合服务平台 | 高温热泵烘干机,高温烘干热泵,热水设备机组_正旭热泵 | 钢格栅板_钢格板网_格栅板-做专业的热镀锌钢格栅板厂家-安平县迎瑞丝网制造有限公司 | 氧化锆纤维_1800度高温退火炉_1800度高温烧结炉-南京理工宇龙新材料股份有限公司 | 整车VOC采样环境舱-甲醛VOC预处理舱-多舱法VOC检测环境仓-上海科绿特科技仪器有限公司 | 大倾角皮带机-皮带输送机-螺旋输送机-矿用皮带输送机价格厂家-河南坤威机械 | 通风天窗,通风气楼,屋顶通风天窗,屋顶通风天窗公司 | 双菱电缆-广州电缆厂_广州电缆厂有限公司 | 楼承板-钢筋楼承板-闭口楼承板-无锡优贝斯楼承板厂 | 免费个人pos机申请办理-移动pos机刷卡-聚合收款码办理 | 北京网站建设-企业网站建设-建站公司-做网站-北京良言多米网络公司 | 吉林污水处理公司,长春工业污水处理设备,净水设备-长春易洁环保科技有限公司 | 天津拓展_天津团建_天津趣味运动会_天津活动策划公司-天津华天拓展培训中心 | 对照品_中药对照品_标准品_对照药材_「格利普」高纯中药标准品厂家-成都格利普生物科技有限公司 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | 手术室净化厂家-成都做医院净化工程的公司-四川华锐-15年特殊科室建设经验 | 波纹补偿器_不锈钢波纹补偿器_巩义市润达管道设备制造有限公司 | 大倾角皮带机-皮带输送机-螺旋输送机-矿用皮带输送机价格厂家-河南坤威机械 | 信阳网站建设专家-信阳时代网联-【信阳网站建设百度推广优质服务提供商】信阳网站建设|信阳网络公司|信阳网络营销推广 | 湖州织里童装_女童男童中大童装_款式多尺码全_织里儿童网【官网】-嘉兴嘉乐网络科技有限公司 | 「安徽双凯」自动售货机-无人售货机-成人用品-自动饮料食品零食售货机 | 煤矿支护网片_矿用勾花菱形网_缝管式_管缝式锚杆-邯郸市永年区志涛工矿配件有限公司 | 昆山PCB加工_SMT贴片_PCB抄板_线路板焊接加工-昆山腾宸电子科技有限公司 | 成都办公室装修-办公室设计-写字楼装修设计-厂房装修-四川和信建筑装饰工程有限公司 | 北京工业设计公司-产品外观设计-产品设计公司-千策良品工业设计 北京翻译公司-专业合同翻译-医学标书翻译收费标准-慕迪灵 | 郑州巴特熔体泵有限公司专业的熔体泵,熔体齿轮泵与换网器生产厂家 | 全自动面膜机_面膜折叠机价格_面膜灌装机定制_高速折棉机厂家-深圳市益豪科技有限公司 | 全自动包装机_灌装机生产厂家-迈驰包装设备有限公司 | 贵州科比特-防雷公司厂家提供贵州防雷工程,防雷检测,防雷接地,防雷设备价格,防雷产品报价服务-贵州防雷检测公司 | 脉冲布袋除尘器_除尘布袋-泊头市净化除尘设备生产厂家 | 非标压力容器_碳钢储罐_不锈钢_搪玻璃反应釜厂家-山东首丰智能环保装备有限公司 | 筒瓦厂家-仿古瓦-寺庙-古建琉璃瓦-宜兴市古典园林建筑陶瓷厂有限公司 | 深圳宣传片制作-企业宣传视频制作-产品视频拍摄-产品动画制作-短视频拍摄制作公司 | 办公室装修_上海办公室设计装修_时尚办公新主张-后街印象 | 紧急切断阀_气动切断阀_不锈钢阀门_截止阀_球阀_蝶阀_闸阀-上海上兆阀门制造有限公司 |