Freemarker中Configuration config = new Configuration(Configuration.VERSION_2_3_31); config.setDefaultEncoding(UTF_8); config.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); config.setLogTemplateExceptions(false);无法使用${xxx?html}转义
时间: 2024-03-01 19:56:29 浏览: 165
重写freemaker2.3.31的Configuration,修复 Freemarker 模板注入漏洞
如果在Freemarker中无法使用`${xxx?html}`进行HTML转义,可能是因为在初始化`Configuration`对象时,没有设置`ObjectWrapper`。在没有设置`ObjectWrapper`的情况下,Freemarker会使用默认的`ObjectWrapper`,可能会导致某些自定义的指令或函数无法正常工作。
解决方法是在初始化`Configuration`对象时,显式地设置一个`ObjectWrapper`,例如:
```
import freemarker.template.DefaultObjectWrapperBuilder;
import freemarker.template.Version;
Configuration config = new Configuration(new Version("2.3.31"));
config.setDefaultEncoding("UTF-8");
config.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
config.setLogTemplateExceptions(false);
DefaultObjectWrapperBuilder owb = new DefaultObjectWrapperBuilder(new Version("2.3.31"));
owb.setExposeFields(true);
config.setObjectWrapper(owb.build());
```
其中`DefaultObjectWrapperBuilder`是一个用于构建`ObjectWrapper`的工具类,可以根据需要设置不同的参数。在这个例子中,我们设置了`setExposeFields(true)`,以便Freemarker可以访问Java对象中的私有字段。这样就可以正常使用`${xxx?html}`进行HTML转义了。
阅读全文