我正在使用 springboot+freemarker。
客户可以修改 freemarker 模板。
如果您添加 <#assign x><#list 1..9999999999999 as n>${n}</#list></#assign>${x}
后端将抛出内存不足错误。
有没有办法可以定义模板的内存。
答案 0 :(得分:0)
您可以使用 Xmx 选项增加应用程序使用的内存(不是专门用于模板)。
例如:
java -Xmx20G -jar app.jar
将使用 20Gb 内存启动 app.jar。
不幸的是,您的模板几乎不可能工作,因为它试图创建一个包含 100,000 亿个元素(1e13 个元素)的字符串,这至少需要 10 TB 的内存。我什至不确定 Java 是否可以处理这种大小的字符串。
答案 1 :(得分:0)
FreeMarker 目前没有支持/解决方案:
<块引用>创建几乎永远运行(使用循环)或耗尽内存(通过连接到循环中的字符串)的模板是微不足道的。 FreeMarker 无法强制执行 CPU 或内存使用限制,因此这在 FreeMarker 级别没有解决方案。
您不应该盲目地让客户处理 freemarker 模板
答案 2 :(得分:0)
还要考虑安全隐患。 FreeMarker 模板可以调用您放入数据模型的对象的公共方法。见https://freemarker.apache.org/docs/app_faq.html#faq_template_uploading_security
如果您的用户不可信(并追究其责任),您就不能允许他们指定 FreeMarker 模板。