java 生成校验验证码_java 验证码生成与校验
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)題。
- 上一篇: 打印机喷头(打印机喷头长什么样)
- 下一篇: 英联邦国家有哪些(53个英联邦成员国)