日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java 生成校验验证码_java 验证码生成与校验

發(fā)布時(shí)間:2023/12/2 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 生成校验验证码_java 验证码生成与校验 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

java繪圖相關(guān)類

驗(yàn)證碼工具類

package dt2008.util;

import javax.imageio.ImageIO;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.awt.*;

import java.awt.image.BufferedImage;

import java.io.IOException;

import java.util.Random;

/**

* 驗(yàn)證碼工具類

*/

public class RandomValidateCodeUtil {

//定義隨機(jī)類

private Random random = new Random();

public void code(HttpServletRequest request, HttpServletResponse response){

//1.創(chuàng)建緩存圖片類

//構(gòu)造方法:new BufferedImage(int width,int height,int model)

BufferedImage image = new BufferedImage(150,50,BufferedImage.TYPE_INT_RGB);

//2.獲取畫(huà)筆

Graphics g = image.getGraphics();

//3.設(shè)置畫(huà)筆顏色

g.setColor(Color.white);//白色

//4.填充矩形

//g.fillRect(x,y,width,height); x,y 起點(diǎn)的坐標(biāo),width矩形寬度,height矩形的高度

g.fillRect(0,0,150,50);

//5.畫(huà)矩形邊框

//設(shè)置畫(huà)筆顏色(邊框的顏色)

g.setColor(Color.blue);//藍(lán)色

//畫(huà)邊框的語(yǔ)法:g.drawRect(x,y,width,height); x,y 起點(diǎn)的坐標(biāo),width邊框?qū)挾?#xff0c;height邊框的高度

g.drawRect(1,1,147,47);

//6.畫(huà)4條干擾線

//畫(huà)直線語(yǔ)法:g.drawLine(x1,y1,x2,y2); x1,y1 線的起點(diǎn)坐標(biāo),x2,y2先的終點(diǎn)坐標(biāo)

for (int i = 0; i < 4; i++) {

//設(shè)置畫(huà)筆為隨機(jī)顏色

g.setColor(getRandomColor());

//隨機(jī)獲取2個(gè)點(diǎn)

int x1 = random.nextInt(147)+1;

int y1 = random.nextInt(47)+1;

int x2 = random.nextInt(147)+1;

int y2 = random.nextInt(47)+1;

//畫(huà)直線

g.drawLine(x1,y1,x2,y2);

}

//7.畫(huà)驗(yàn)證碼字符串

String checkCodeScope = "qwertyupasdfghjkzxcvbnm";

//定義接收拼接隨機(jī)獲取到的驗(yàn)證碼字符變量

StringBuilder checkCodeBuilder = new StringBuilder();

//循環(huán)隨機(jī)獲取4個(gè)驗(yàn)證碼字符

for (int i = 0; i < 4; i++) {

//獲取隨機(jī)位置

int index = random.nextInt(checkCodeScope.length());

//根據(jù)位置獲取字符

char c = checkCodeScope.charAt(index);

//checkCodeBuilder拼接獲取的隨機(jī)字符

checkCodeBuilder.append(c);

//設(shè)置畫(huà)筆的字體

//字符構(gòu)造方法:new Font(字體,樣式,大小)

g.setFont(new Font("微軟雅黑",Font.BOLD,20));

//將每個(gè)字符畫(huà)到圖片上

//語(yǔ)法:g.drawString(字符串,x,y);

g.drawString(c+"",30+i*30,30);

}

request.getSession().setAttribute("SESSION_CHECKCODE", checkCodeBuilder.toString());

//8.將驗(yàn)證碼圖片輸出給瀏覽器

//輸出緩存圖片的語(yǔ)法:ImageIO.write(緩存圖片,圖片的格式,輸出給瀏覽器的字節(jié)流);

try {

ImageIO.write(image,"png",response.getOutputStream());

} catch (IOException e) {

e.printStackTrace();

}

}

//獲取隨機(jī)的顏色

private Color getRandomColor(){

int r = random.nextInt(256);

int g = random.nextInt(256);

int b = random.nextInt(256);

//構(gòu)造方法語(yǔ)法:new Color(int r,int g,int b) //由紅、綠、藍(lán)組成, 每個(gè)顏色值范圍0~255

return new Color(r,g,b);

}

}

Controller(生成驗(yàn)證碼)

package yingshi.web;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.RestController;

import yingshi.util.RandomValidateCodeUtil;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import java.io.IOException;

/**

* 登錄以及驗(yàn)證碼

*/

@RestController

@RequestMapping("login/admin")

public class LoginController {

/**

* 生成驗(yàn)證碼

*/

@RequestMapping("getVerify")

public void getVerify(HttpServletRequest request, HttpServletResponse response) {

RandomValidateCodeUtil randomValidateCodeUtil = new RandomValidateCodeUtil();

randomValidateCodeUtil.code(request, response);

}

}

這時(shí),可以訪問(wèn)驗(yàn)證碼了,可以在前端那寫(xiě)個(gè)js點(diǎn)擊切換驗(yàn)證碼

接下來(lái)就是校驗(yàn)驗(yàn)證碼(注意:是分大小寫(xiě)的)

package yingshi.web;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.RestController;

import yingshi.util.RandomValidateCodeUtil;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import java.io.IOException;

/**

* 登錄以及驗(yàn)證碼

*/

@RestController

@RequestMapping("login/admin")

public class LoginController {

/**

* 校驗(yàn)后臺(tái)登錄

*/

@RequestMapping("checkVerify")

public String checkVerify(String username, String password, String verifyInput, HttpServletRequest request, HttpServletResponse response) {

//驗(yàn)證碼校驗(yàn)

//獲取session中的驗(yàn)證碼

String sessionCheckCode = (String) request.getSession().getAttribute("SESSION_CHECKCODE");

//判斷驗(yàn)證碼是否正確

if(!verifyInput.equals(sessionCheckCode)){

return "錯(cuò)誤";

}else{

return "正確";

}

}

}

希望這篇文章對(duì)您有幫助!

總結(jié)

以上是生活随笔為你收集整理的java 生成校验验证码_java 验证码生成与校验的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。