感谢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 }