生成验证码后将验证码暂存在Session对象中
在util工具包中添加验证码的工具类CreateVerifiCodeImage
package cn.com.fanjingxuan.util;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.Random;
/**
* @project: ssm_sms
* @description: 绘制验证码图片
* @date: 6/9/2019-5:46 PM
* @version: 1.0
* @website: https://yubuntu0109.github.io/
*/
public class CreateVerifiCodeImage {
private static int WIDTH = 90;
private static int HEIGHT = 35;
private static int FONT_SIZE = 20; //字符大小
private static char[] verifiCode; //验证码
private static BufferedImage verifiCodeImage; //验证码图片
/**
* @description: 获取验证码图片
* @param: no
* @date: 2019-06-09 5:46 PM
* @return: java.awt.image.BufferedImage
*/
public static BufferedImage getVerifiCodeImage() {
verifiCodeImage = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_BGR);// create a image
Graphics graphics = verifiCodeImage.getGraphics();
verifiCode = generateCheckCode();
drawBackground(graphics);
drawRands(graphics, verifiCode);
graphics.dispose();
return verifiCodeImage;
}
/**
* @description: 获取验证码
* @param: no
* @date: 2019-06-09 5:47 PM
* @return: char[]
*/
public static char[] getVerifiCode() {
return verifiCode;
}
/**
* @description: 随机生成验证码
* @param: no
* @date: 2019-06-09 5:47 PM
* @return: char[]
*/
private static char[] generateCheckCode() {
// String chars = "0123456789"+"abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
String chars = "0123456789";
// String chars = "0123456789"+"abcdefghijklmnopqrstuvwxyz";
char[] rands = new char[4];
for (int i = 0; i < 4; i++) {
// int rand = (int) (Math.random() * (10 + 26 * 2)); //数字+大写字母+小写字母
// int rand = (int) (Math.random() * (10 + 26 * 2)); //数字+大写字母(小写字母)
int rand = (int) (Math.random() * 10 ); //数字
rands[i] = chars.charAt(rand);
}
return rands;
}
/**
* @description: 绘制验证码
* @param: g
* @param: rands
* @date: 2019-06-09 5:47 PM
* @return: void
*/
private static void drawRands(Graphics g, char[] rands) {
g.setFont(new Font("Console", Font.BOLD, FONT_SIZE));
for (int i = 0; i < rands.length; i++) {
g.setColor(getRandomColor());
g.drawString("" + rands[i], i * FONT_SIZE + 10, 25);
}
}
/**
* @description: 绘制验证码图片背景
* @param: g
* @date: 2019-06-09 5:48 PM
* @return: void
*/
private static void drawBackground(Graphics g) {
g.setColor(Color.white);
g.fillRect(0, 0, WIDTH, HEIGHT);
// 绘制验证码干扰点
for (int i = 0; i < 200; i++) {
int x = (int) (Math.random() * WIDTH);
int y = (int) (Math.random() * HEIGHT);
g.setColor(getRandomColor());
g.drawOval(x, y, 1, 1);
}
}
/**
* @description: 获取随机颜色
* @param: no
* @date: 2019-06-09 5:48 PM
* @return: java.awt.Color
*/
private static Color getRandomColor() {
Random ran = new Random();
return new Color(ran.nextInt(220), ran.nextInt(220), ran.nextInt(220));
}
}
在controller层调用获取验证码的方法
/**
获取验证码
*/
@GetMapping("/getVerifiCodeImage")
public String getVerifiCodeImage(HttpServletRequest request, HttpServletResponse response) {
// 验证码图片
BufferedImage verifiCodeImage = CreateVerifiCodeImage.getVerifiCodeImage();
// 验证码
String verifiCode = String.valueOf(CreateVerifiCodeImage.getVerifiCode());
request.getSession().setAttribute("verifiCode", verifiCode);
// 将验证码图片输出到登录页面
try {
ImageIO.write(verifiCodeImage, "JPEG", response.getOutputStream());
// 存储验证码Session
return verifiCode;
} catch (IOException e) {
e.printStackTrace();
return BaseController.ERROR;
}
}
在controller层调用登录的方法
/**
验证码登入
*/
@RequestMapping("/getcodeLogin")
@ResponseBody
public Map<String,Object> login(Employee employee, HttpServletRequest request) throws Exception {
Map<String,Object> result = new HashMap<>();
// //校验验证码信息
String vcode = (String) request.getSession().getAttribute("verifiCode");
if ("".equals(vcode)){
result.put("success",false);
result.put("msg","长时间未操作,会话已失效,请刷新页面后重试!");
return result;
} else if (!employee. getVerification(). equalsIgnoreCase(vcode)) {
result. put("success", false);
result. put("msg", "验证码错误!");
return result;
}
request. getSession(). removeAttribute("verifiCode");
//校验用户名和密码
Employee admin = employeeService.login(employee);
if (admin != null){
if (admin.getPassword().equals(employee.getPassword())){
//将用户信息存储到Session //登入成功
HttpSession session = request. getSession();
session. setAttribute("userInfo", admin); //1.用于拦截器的判断 2.界面显示用户信息
result. put("Id", admin.getId());
result. put("success", true);
return result;
}
//登录失败 ,密码错误
result. put("success", false);
result. put("msg", "密码错误!");
return result;
}
//登录失败,用户名错误或不存在
result. put("success", false);
result. put("msg", "用户名错误或不存在!");
return result;
}