Springboot 验证码生成和校验,图片格式和base64编码串

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
randomStr += rand;

g.translate(random.nextInt(3), random.nextInt(6));

g.drawString(rand, 40 * i + 10, 25);

return randomStr;

}

//生成随机图片

public void getRandomCodeImage(HttpServletRequest request, HttpServletResponse response){

HttpSession session = request.getSession();

// BufferedImage类是具有缓冲区的Image类,Image类是用于描述图像信息的类

BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);

Graphics g = image.getGraphics();

g.fillRect(0, 0, width, height);

g.setColor(getRandomColor(105, 189));

g.setFont(getFont());

// 干扰线

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

drawLine(g);

}

// 随机字符

String randomStr = “”;

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

randomStr = drawString(g, randomStr, i);

}

System.out.println(“随机字符:”+randomStr);

g.dispose();

//移除之前的session中的验证码信息

session.removeAttribute(sessionKey);

//重新将验证码放入session

session.setAttribute(sessionKey, randomStr);

try {

// 将图片以png格式返回,返回的是图片

ImageIO.write(image, “PNG”, response.getOutputStream());

} catch (Exception e) {

e.printStackTrace();

}

}

//生成随机图片的base64编码字符串

public String getRandomCodeBase64(HttpServletRequest request, HttpServletResponse response) {

HttpSession session = request.getSession();

// BufferedImage类是具有缓冲区的Image类,Image类是用于描述图像信息的类

BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);

Graphics g = image.getGraphics();

g.fillRect(0, 0, width, height);

g.setColor(getRandomColor(105, 189));

g.setFont(getFont());

//干扰线

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

drawLine(g);

}

//随机字符

String randomStr = “”;

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

randomStr = drawString(g, randomStr, i);

}

System.out.println(“随机字符:”+randomStr);

g.dispose();

session.removeAttribute(sessionKey);

session.setAttribute(sessionKey, randomStr);

String base64String = “”;

try {

// 直接返回图片

// ImageIO.write(image, “PNG”, response.getOutputStream());

//返回 base64

ByteArrayOutputStream bos = new ByteArrayOutputStream();

ImageIO.write(image, “PNG”, bos);

byte[] bytes = bos.toByteArray();

Base64.Encoder encoder = Base64.getEncoder();

base64String = encoder.encodeToString(bytes);

} catch (Exception e) {

e.printStackTrace();

}

return base64String;

}

}

接下来写接口,创建一个ValidateCodeController.java,

先是生成验证码,返回图片的接口:

import com.example.demo.util.ValidateCodeUtil;

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

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

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

/**

  • @Author : JCccc

  • @CreateTime : 2019/9/25

  • @Description :

**/

@RestController

public class ValidateCodeController {

//返回验证码图片

@GetMapping(“/getCaptchaImg”)

public void getCaptchaImg(HttpServletRequest request, HttpServletResponse response, HttpSession session) {

try {

response.setContentType(“image/png”);

response.setHeader(“Cache-Control”, “no-cache”);

response.setHeader(“Expire”, “0”);

response.setHeader(“Pragma”, “no-cache”);

ValidateCodeUtil validateCode = new ValidateCodeUtil();

// getRandomCodeImage方法会直接将生成的验证码图片写入response

validateCode.getRandomCodeImage(request, response);

// System.out.println(“session里面存储的验证码为:”+session.getAttribute(“JCCODE”));

} catch (Exception e) {

e.printStackTrace();

}

}

}

用postman来调用下接口,

可以看到控制台的打印,这个验证码字符串已经存入了session(在后面的验证接口有介绍取值)

OK,接下来是编写一个校验验证码接口:

//验证码校验

@GetMapping(“/checkCaptcha”)

public boolean getCheckCaptcha(@RequestParam(“code”) String code, HttpSession session) {

try {

//toLowerCase() 不区分大小写进行验证码校验

String sessionCode= String.valueOf(session.getAttribute(“JCCODE”)).toLowerCase();

System.out.println(“session里的验证码:”+sessionCode);

String receivedCode=code.toLowerCase();

System.out.println(“用户的验证码:”+receivedCode);

return !sessionCode.equals(“”) && !receivedCode.equals(“”) && sessionCode.equals(receivedCode);

} catch (Exception e) {

return false;

}

}

用postman调下接口,先生成验证码模拟返回给页面了,

然后调用校验验证码接口,模拟用户在页面输入验证码,

可以看到校验正确。

最后,再补一个返回base64编码串的接口,

// 生成验证码,返回的是 base64

@GetMapping(“/getCaptchaBase64”)

public Object getCaptchaBase64(HttpServletRequest request, HttpServletResponse response) {

Map result = new HashMap();

try {

response.setContentType(“image/png”);

response.setHeader(“Cache-Control”, “no-cache”);

response.setHeader(“Expire”, “0”);

response.setHeader(“Pragma”, “no-cache”);

ValidateCodeUtil validateCode = new ValidateCodeUtil();

// 返回base64

String base64String = validateCode.getRandomCodeBase64(request, response);

result.put(“url”, “data:image/png;base64,” + base64String);

result.put(“message”, “created successfull”);

//http://tool.chinaz.com/tools/imgtobase/ base64直接转为图片网站

System.out.println(“结果:” + result.get(“url”));

} catch (Exception e) {

System.out.println(e);

}

return result;

}

Kafka进阶篇知识点

image

Kafka高级篇知识点

image

44个Kafka知识点(基础+进阶+高级)解析如下

image

由于篇幅有限,小编已将上面介绍的**《Kafka源码解析与实战》、Kafka面试专题解析、复习学习必备44个Kafka知识点(基础+进阶+高级)都整理成册,全部都是PDF文档**

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
ut.println(e);

}

return result;

}

Kafka进阶篇知识点

[外链图片转存中…(img-mJCmw640-1714663417098)]

Kafka高级篇知识点

[外链图片转存中…(img-IILWnvGh-1714663417098)]

44个Kafka知识点(基础+进阶+高级)解析如下

[外链图片转存中…(img-6JBcf9Z1-1714663417098)]

由于篇幅有限,小编已将上面介绍的**《Kafka源码解析与实战》、Kafka面试专题解析、复习学习必备44个Kafka知识点(基础+进阶+高级)都整理成册,全部都是PDF文档**

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

  • 20
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值