亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring Boot 驗證碼的生成和驗證詳解

 更新時間:2017年06月09日 10:26:27   作者:瘋狂的米老鼠  
我們在做用戶登錄的時候,為了安全性考慮,會增加驗證碼的功能,下面這篇文章主要給大家介紹了關(guān)于Spring Boot中驗證碼的生成和驗證的相關(guān)資料,文中給出了詳細的示例代碼供大家參考學(xué)習(xí),需要的朋友們下面來一起看看吧。

前言

本文介紹的imagecode方法是一個生成圖形驗證碼的請求,checkcode方法實現(xiàn)了對這個圖形驗證碼的驗證。從驗證碼的生成到驗證的過程中,驗證碼是通過Session來保存的,并且設(shè)定一個驗證碼的最長有效時間為5分鐘。驗證碼的生成規(guī)則是從0~9的數(shù)字中,隨機產(chǎn)生一個4位數(shù),并增加一些干擾元素,最終組合成為一個圖形輸出

1、驗證碼生成類

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.OutputStream;import java.util.HashMap;
import java.util.Map;import java.util.Random;

public class ImageCode {
 private static char mapTable[] = {
   '0', '1', '2', '3', '4', '5',
   '6', '7', '8', '9', '0', '1',
   '2', '3', '4', '5', '6', '7',
   '8', '9'};
 public static Map<String, Object> getImageCode(int width, int height, OutputStream os) {
  Map<String,Object> returnMap = new HashMap<String, Object>();
  if (width <= 0) width = 60;
  if (height <= 0) height = 20;
  BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
  // 獲取圖形上下文
  Graphics g = image.getGraphics();
  //生成隨機類
  Random random = new Random();
  // 設(shè)定背景色
  g.setColor(getRandColor(200, 250));
  g.fillRect(0, 0, width, height);
  //設(shè)定字體
  g.setFont(new Font("Times New Roman", Font.PLAIN, 18));
  // 隨機產(chǎn)生168條干擾線,使圖象中的認證碼不易被其它程序探測到
  g.setColor(getRandColor(160, 200));
  for (int i = 0; i < 168; i++) {
   int x = random.nextInt(width);
   int y = random.nextInt(height);
   int xl = random.nextInt(12);
   int yl = random.nextInt(12);
   g.drawLine(x, y, x + xl, y + yl);
  }
  //取隨機產(chǎn)生的碼
  String strEnsure = "";
  //4代表4位驗證碼,如果要生成更多位的認證碼,則加大數(shù)值
  for (int i = 0; i < 4; ++i) {
   strEnsure += mapTable[(int) (mapTable.length * Math.random())];
   // 將認證碼顯示到圖象中
   g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));
   //直接生成
   String str = strEnsure.substring(i, i + 1);
   g.drawString(str, 13 * i + 6, 16);
  }
  // 釋放圖形上下文
  g.dispose();
  returnMap.put("image",image);
  returnMap.put("strEnsure",strEnsure);
  return returnMap;
 }
 //給定范圍獲得隨機顏色
 static Color getRandColor(int fc, int bc) {
  Random random = new Random();
  if (fc > 255) fc = 255;
  if (bc > 255) bc = 255;
  int r = fc + random.nextInt(bc - fc);
  int g = fc + random.nextInt(bc - fc);
  int b = fc + random.nextInt(bc - fc);
  return new Color(r, g, b);
 }
}

2、獲取驗證碼API

@RequestMapping(value = "/images/imagecode")
public String imagecode(HttpServletRequest request, HttpServletResponse response) throws Exception {
 OutputStream os = response.getOutputStream();
 Map<String,Object> map = ImageCode.getImageCode(60, 20, os);
 String simpleCaptcha = "simpleCaptcha";
 request.getSession().setAttribute(simpleCaptcha, map.get("strEnsure").toString().toLowerCase());
 request.getSession().setAttribute("codeTime",new Date().getTime());
 try {
  ImageIO.write((BufferedImage) map.get("image"), "JPEG", os);
 } catch (IOException e) {
  return "";
 }
 return null;
}

3、驗證驗證碼API

@RequestMapping(value = "/checkcode")
@ResponseBody
public String checkcode(HttpServletRequest request, HttpSession session) throws Exception {
 String checkCode = request.getParameter("checkCode");
 Object cko = session.getAttribute("simpleCaptcha") ; //驗證碼對象
 if(cko == null){
  request.setAttribute("errorMsg", "驗證碼已失效,請重新輸入!");
  return "驗證碼已失效,請重新輸入!";
 }
 String captcha = cko.toString();
 Date now = new Date();
 Long codeTime = Long.valueOf(session.getAttribute("codeTime")+"");
 if(StringUtils.isEmpty(checkCode) || captcha == null || !(checkCode.equalsIgnoreCase(captcha))) {
  request.setAttribute("errorMsg", "驗證碼錯誤!");
  return "驗證碼錯誤!";
 } else if ((now.getTime()-codeTime)/1000/60>5) {
  //驗證碼有效時長為5分鐘
  request.setAttribute("errorMsg", "驗證碼已失效,請重新輸入!");
  return "驗證碼已失效,請重新輸入!";
 }else {
  session.removeAttribute("simpleCaptcha");
  return "1";
 }
}

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Java編譯錯誤信息提示java.lang.ExceptionInInitializer解決

    Java編譯錯誤信息提示java.lang.ExceptionInInitializer解決

    這篇文章主要介紹了Java編譯錯誤信息提示java.lang.ExceptionInInitializer的分析講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • 解決IDEA使用maven創(chuàng)建Web項目,出現(xiàn)500錯誤的問題

    解決IDEA使用maven創(chuàng)建Web項目,出現(xiàn)500錯誤的問題

    本文主要介紹了在使用Maven創(chuàng)建項目并導(dǎo)入依賴寫完測試代碼后運行出現(xiàn)500錯誤的解決步驟,這種問題的根本原因是Tomcat啟動后缺少某些支持的jar包,導(dǎo)致運行出錯,解決方法是在項目結(jié)構(gòu)中找到Artifacts,點擊要編輯的項目
    2024-10-10
  • Spring5中的WebClient使用方法詳解

    Spring5中的WebClient使用方法詳解

    這篇文章主要給大家介紹了關(guān)于Spring5中WebClient使用方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Spring5具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • JAVAWEB實現(xiàn)簡單的商城項目(一)實例代碼解析

    JAVAWEB實現(xiàn)簡單的商城項目(一)實例代碼解析

    本文給大家分享一段實例代碼給大家介紹JAVAWEB實現(xiàn)簡單的商城項目(一),非常具有參考價值,感興趣的朋友一起學(xué)習(xí)吧
    2016-02-02
  • java 字符串轉(zhuǎn)化為字符數(shù)組的3種實現(xiàn)案例

    java 字符串轉(zhuǎn)化為字符數(shù)組的3種實現(xiàn)案例

    這篇文章主要介紹了java 字符串轉(zhuǎn)化為字符數(shù)組的3種實現(xiàn)案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • SpringBoot實現(xiàn)自定義指標監(jiān)控功能

    SpringBoot實現(xiàn)自定義指標監(jiān)控功能

    本文主要介紹了SpringBoot實現(xiàn)自定義指標監(jiān)控功能的實現(xiàn),,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,感興趣的小伙伴跟著著小編來一起來學(xué)習(xí)吧
    2024-01-01
  • Java獲取resources下文件路徑的幾種方法及遇到的問題

    Java獲取resources下文件路徑的幾種方法及遇到的問題

    這篇文章主要給大家介紹了關(guān)于Java獲取resources下文件路徑的幾種方法及遇到的問題,在Java開發(fā)中經(jīng)常需要讀取項目中resources目錄下的文件或獲取資源路徑,需要的朋友可以參考下
    2023-12-12
  • Java中對null進行強制類型轉(zhuǎn)換的方法

    Java中對null進行強制類型轉(zhuǎn)換的方法

    小編對null進行強轉(zhuǎn)會不會拋錯,非常的好奇,下面小編通過實例代碼給大家介紹Java中對null進行強制類型轉(zhuǎn)換的方法,感興趣的朋友參考下吧
    2018-09-09
  • java中使用sax解析xml的解決方法

    java中使用sax解析xml的解決方法

    本篇文章介紹了,在java中使用sax解析xml的解決方法。需要的朋友參考下
    2013-05-05
  • IDEA安裝Leetcode插件的教程

    IDEA安裝Leetcode插件的教程

    這篇文章主要介紹了IDEA安裝Leetcode插件的教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11

最新評論