av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

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

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
相關文章:
主站蜘蛛池模板: 午夜一区二区三区在线观看 | av手机在线看| 国产性色视频 | 日本成人三级电影 | 国产精品一区二区在线 | 日韩一区和二区 | 午夜精品一区二区三区在线观看 | 日韩精品区 | 精品久久久久久久久久久久久久久久久 | 欧美日韩亚洲一区 | 亚洲黄色在线 | 盗摄精品av一区二区三区 | 日韩在线电影 | 国产高清视频 | 亚洲一av | 中文字幕亚洲视频 | 国产精品毛片一区二区在线看 | 久久久久久久久久久久久久国产 | 天天插天天射天天干 | 久久久久久久久久久蜜桃 | 色网在线观看 | 色爱综合网 | 一级片av| www.亚洲成人网 | 夜久久 | 国产精品欧美日韩 | 91在线观看免费 | 精品亚洲永久免费精品 | 日韩免费一区 | 欧美久久久久久久久 | jlzzjlzz欧美大全 | 日韩在线综合 | 久久久成人精品 | 日本电影免费完整观看 | 国产激情免费视频 | 午夜精品一区二区三区在线视频 | 在线午夜 | 国产欧美精品一区二区三区 | 国产人久久人人人人爽 | 日韩一区二区在线视频 | 视频一区中文字幕 |