✨重磅!盹猫的个人小站正式上线啦~诚邀各位技术大佬前来探秘!✨
这里有:
- 硬核技术干货:编程技巧、开发经验、踩坑指南,带你解锁技术新姿势!
- 趣味开发日常:代码背后的脑洞故事、工具测评,让技术圈不再枯燥~
- 独家资源分享:开源项目、学习资料包,助你打怪升级快人一步!
点击直达→ 盹猫猫的个人小站
来逛逛吧,说不定能挖到你正在找的技术宝藏哦~
目录
欢迎来到 盹猫(>^ω^<)的博客
本篇文章主要介绍了
[SpringBoot生成二维码]
❤博主广交技术好友,喜欢文章的可以关注一下❤
前言
二维码在生活中已经很常见了, 常用于快速的登录,邀请等操作,其本质是构建了可被扫码的图形化的快速分享通道,二维码可以由前端代码生成,也可以进行后端生成,所以这很容易打架!
当然如果你说过你是全栈工程师,那就只能是你了(老板内心偷乐).
本篇文章就是记录由前端和后端生成二维码的方式,算了还是先记录后端吧.(这算不算挑起战争)
二维码的起源
20 世纪 50 年代,为解决收银员手写记录商品售卖情况导致的结账效率慢的问题,日本人(该死)发明了条形码。条形码通过黑白相间、宽度不同的线条组合来存储信息,但由于长度有限,存储的信息很快不能满足社会需求,所以就有了二维码(二维码=记录更多信息的条形码).
⭐ 环境准备
名称 | 版本 |
---|---|
springboot | 3.5.6 |
jdk | 21 |
hutool-all | 5.8.35 |
zxing-core | 3.5.2 |
除了基础的springboot和jdk外,我们需要hutool-all(糊涂)包帮助快速生成二维码,而生成二维码的核心是用到了zxing-core这个包(一个套一个).
Pom依赖
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-logging
com.google.zxing
core
3.5.2
cn.hutool
hutool-all
5.8.35
⭐ 代码步骤
生成二维码主要用到QrCodeUtil下的generate方法:
QrCodeUtil.generate(内容, 宽度, 高度,格式,目标);
内容: 可以是文本,超链接等
宽度和高度: 就是二维码图片的宽度和高度
格式: 生成的图片格式
目标:输出到哪里,可以是文件或者输出流.
普通二维码
@GetMapping("/hutool/qrcode")
public void generateQRCodeByHutool(
@RequestParam String content,
HttpServletResponse response
) throws Exception {
//设置响应格式
response.setContentType("image/png");
//获取响应的输出流
OutputStream os = response.getOutputStream();
// 生成二维码并写入输出流
QrCodeUtil.generate(content, 300, 300,"png",os);
}
如上述代码即输出一个普通的二维码宽度和高度为300,格式为png,输出到响应的输出流中.这样浏览器访问 /hutool/qrcode?content=内容 即可将内容输出为二维码图片.
带Logo二维码
除了宽度和高度外仍然有很多定义的属性,如logo,背景色等对二维码设置的属性,这样放在一个方法中就显得属性值太多了,所以定义了一个QrConfig属性进行配置:
QrCodeUtil.generate(内容, 配置类, 格式, 目标);
如下代码中,可以为二维码添加自定义的logo, logo是否为圆角等配置信息:
@GetMapping("/hutool/qrcode/custom")
public void generateCustomQRCode(
@RequestParam String content,
HttpServletResponse response
) throws Exception {
response.setContentType("image/png");
OutputStream os = response.getOutputStream();
// 配置二维码参数
QrConfig config = new QrConfig(500, 500);
config.setErrorCorrection(ErrorCorrectionLevel.L); // 容错等级
config.setImg("/home/seaua/Desktop/logo.png"); // 加入logo(路径或InputStream)
//圆角
config.setRound(0.2);
//间隔 二维码到边的留白
config.setMargin(2);
// 生成并输出
QrCodeUtil.generate(content, config, "png", os);
}
因为二维码容易被禁,所以这里就不上传效果了,自己动手试一试吧!
❓ 疑问解答
有很多二维码带有时效性(一段时间不能用了),如何生成带有时效性的二维码?
时效性二维码实际是时效性链接的生成和验证,我们可以生成的链接中添加过期的时间戳,并且对(时间戳+盐)进行MD5加密同样添加到链接中,这样用户扫描后,跳转到我们定义的链接后即可通过对(时间戳+盐)进行校验,同时与当前时间进行比较,就保证了二维码链接的时效性.
public String generateQrCodeUrl(Long comboId,Long expireTime){
//生成MD5加密串
String sign = getMd5Sign(comboId,expireTime);
//返回链接
return redirect + "?comboId=" +
comboId +
"&expire=" +
expireTime +
"&sign=" +
sign;
}
public String getMd5Sign(Long comboId,Long expireTime){
//进行自定义格式签名,comboId为业务数据.
return MD5.encode(comboId+":"+expireTime+":"+secret);
}
public Long getExpire(){
//获取当前时间戳
long timeStamp = System.currentTimeMillis();
//设置过期时间
return timeStamp + expire * 1000;
}
总结
通过集成hutool依赖,可以很方便的在后端生成二维码,同时自定义二维码的多种属性,如果需要追求二维码的时效性,不要忘了对链接加签名验证哦!
上面就是所有文章内容了,如果内容对你有帮助,麻烦留一个赞和收藏⭐支持一下!
如果你对区块链内容感兴趣可以查看我的专栏:小试牛刀-区块链
感谢您的关注和收藏!!!!!!