感谢hutool。
为了安全,先将要生成的内容Base62编码(编码方法可以自定义),再用QrCodeUtil生成图片
(单独测试可能会有报异常,需要把生成到流的方法注释掉即可)
1 package com.util; 2 3 import cn.hutool.core.codec.Base62; 4 import cn.hutool.core.io.FileUtil; 5 import cn.hutool.core.util.CharsetUtil; 6 import cn.hutool.extra.qrcode.QrCodeUtil; 7 import cn.hutool.extra.qrcode.QrConfig; 8 import org.apache.commons.lang.StringUtils; 9 import org.slf4j.Logger; 10 import org.slf4j.LoggerFactory; 11 import org.springframework.web.util.UrlPathHelper; 12 13 import javax.servlet.http.HttpServletRequest; 14 import javax.servlet.http.HttpServletResponse; 15 import java.awt.*; 16 import java.io.UnsupportedEncodingException; 17 import java.net.InetAddress; 18 import java.net.URLDecoder; 19 import java.util.Date; 20 import java.util.Enumeration; 21 import java.util.HashMap; 22 import java.util.Map; 23 24 /** 25 * QrUtils 26 * @author dhdu@qq.com 27 */ 28 public class QrUtils { 29 private static final Logger log = LoggerFactory 30 .getLogger(QrUtils.class); 31 32 // 自定义参数,这部分是Hutool工具封装的 33 private static QrConfig initQrConfig() { 34 QrConfig config = new QrConfig(222, 222); 35 // 设置边距,既二维码和背景之间的边距 36 config.setMargin(1); 37 // 设置前景色,既二维码颜色(绿色) 38 config.setForeColor(Color.GREEN); 39 // 设置背景色(白色) 40 config.setBackColor(Color.white); 41 config.setRatio(8); 42 return config; 43 } 44 /** 45 * 生成到文件 46 * @param content raw str 47 * @param filepath 48 */ 49 public static void createQRCode2File(String content, String filepath) { 50 try { 51 content = Base62.encode(content, CharsetUtil.CHARSET_UTF_8); 52 QrCodeUtil.generate(content,initQrConfig(), FileUtil.file(filepath)); 53 log.info("二维码生成成功, 在{}下!",filepath); 54 } catch (Exception e) { 55 e.printStackTrace(); 56 } 57 } 58 /** 59 * 生成到流 60 * @param content raw str 61 * @param response 62 */ 63 public static void createQRCode2Stream(String content, HttpServletResponse response) { 64 try { 65 content = Base62.encode(content, CharsetUtil.CHARSET_UTF_8); 66 QrCodeUtil.generate(content, initQrConfig(), "png", response.getOutputStream()); 67 log.info("二维码生成成功!"); 68 } catch (Exception e) { 69 log.error("发生异常 {}!", e.getMessage()); 70 } 71 } 72 73 /** 74 * decode 75 * @param base62 76 * @return raw str 77 */ 78 public static String getContent(String base62) 79 { 80 String decodedStr = Base62.decodeStr(base62, CharsetUtil.CHARSET_UTF_8); 81 return decodedStr; 82 } 83 84 }