java 生成校验验证码_java 验证码生成与校验
java繪圖相關類
驗證碼工具類
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;
/**
* 驗證碼工具類
*/
public class RandomValidateCodeUtil {
//定義隨機類
private Random random = new Random();
public void code(HttpServletRequest request, HttpServletResponse response){
//1.創建緩存圖片類
//構造方法:new BufferedImage(int width,int height,int model)
BufferedImage image = new BufferedImage(150,50,BufferedImage.TYPE_INT_RGB);
//2.獲取畫筆
Graphics g = image.getGraphics();
//3.設置畫筆顏色
g.setColor(Color.white);//白色
//4.填充矩形
//g.fillRect(x,y,width,height); x,y 起點的坐標,width矩形寬度,height矩形的高度
g.fillRect(0,0,150,50);
//5.畫矩形邊框
//設置畫筆顏色(邊框的顏色)
g.setColor(Color.blue);//藍色
//畫邊框的語法:g.drawRect(x,y,width,height); x,y 起點的坐標,width邊框寬度,height邊框的高度
g.drawRect(1,1,147,47);
//6.畫4條干擾線
//畫直線語法:g.drawLine(x1,y1,x2,y2); x1,y1 線的起點坐標,x2,y2先的終點坐標
for (int i = 0; i < 4; i++) {
//設置畫筆為隨機顏色
g.setColor(getRandomColor());
//隨機獲取2個點
int x1 = random.nextInt(147)+1;
int y1 = random.nextInt(47)+1;
int x2 = random.nextInt(147)+1;
int y2 = random.nextInt(47)+1;
//畫直線
g.drawLine(x1,y1,x2,y2);
}
//7.畫驗證碼字符串
String checkCodeScope = "qwertyupasdfghjkzxcvbnm";
//定義接收拼接隨機獲取到的驗證碼字符變量
StringBuilder checkCodeBuilder = new StringBuilder();
//循環隨機獲取4個驗證碼字符
for (int i = 0; i < 4; i++) {
//獲取隨機位置
int index = random.nextInt(checkCodeScope.length());
//根據位置獲取字符
char c = checkCodeScope.charAt(index);
//checkCodeBuilder拼接獲取的隨機字符
checkCodeBuilder.append(c);
//設置畫筆的字體
//字符構造方法:new Font(字體,樣式,大小)
g.setFont(new Font("微軟雅黑",Font.BOLD,20));
//將每個字符畫到圖片上
//語法:g.drawString(字符串,x,y);
g.drawString(c+"",30+i*30,30);
}
request.getSession().setAttribute("SESSION_CHECKCODE", checkCodeBuilder.toString());
//8.將驗證碼圖片輸出給瀏覽器
//輸出緩存圖片的語法:ImageIO.write(緩存圖片,圖片的格式,輸出給瀏覽器的字節流);
try {
ImageIO.write(image,"png",response.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
//獲取隨機的顏色
private Color getRandomColor(){
int r = random.nextInt(256);
int g = random.nextInt(256);
int b = random.nextInt(256);
//構造方法語法:new Color(int r,int g,int b) //由紅、綠、藍組成, 每個顏色值范圍0~255
return new Color(r,g,b);
}
}
Controller(生成驗證碼)
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;
/**
* 登錄以及驗證碼
*/
@RestController
@RequestMapping("login/admin")
public class LoginController {
/**
* 生成驗證碼
*/
@RequestMapping("getVerify")
public void getVerify(HttpServletRequest request, HttpServletResponse response) {
RandomValidateCodeUtil randomValidateCodeUtil = new RandomValidateCodeUtil();
randomValidateCodeUtil.code(request, response);
}
}
這時,可以訪問驗證碼了,可以在前端那寫個js點擊切換驗證碼
接下來就是校驗驗證碼(注意:是分大小寫的)
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;
/**
* 登錄以及驗證碼
*/
@RestController
@RequestMapping("login/admin")
public class LoginController {
/**
* 校驗后臺登錄
*/
@RequestMapping("checkVerify")
public String checkVerify(String username, String password, String verifyInput, HttpServletRequest request, HttpServletResponse response) {
//驗證碼校驗
//獲取session中的驗證碼
String sessionCheckCode = (String) request.getSession().getAttribute("SESSION_CHECKCODE");
//判斷驗證碼是否正確
if(!verifyInput.equals(sessionCheckCode)){
return "錯誤";
}else{
return "正確";
}
}
}
希望這篇文章對您有幫助!
總結
以上是生活随笔為你收集整理的java 生成校验验证码_java 验证码生成与校验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 打印机喷头(打印机喷头长什么样)
- 下一篇: 英联邦国家有哪些(53个英联邦成员国)