《一线大厂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进阶篇知识点
Kafka高级篇知识点
44个Kafka知识点(基础+进阶+高级)解析如下
由于篇幅有限,小编已将上面介绍的**《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面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!