为FreeMarker配置安全策略

优质
小牛编辑
140浏览
2023-12-01

当 FreeMarker 运行在装有安全管理器的Java虚拟机中时, 你不得不再授与一些权限,确保运行良好。最值得注意的是, 你需要为对 freemarker.jar 的安全策略文件添加这些条目:

grant codeBase "file:/path/to/freemarker.jar" 
{
  permission java.util.PropertyPermission "file.encoding", "read";
  permission java.util.PropertyPermission "freemarker.*", "read";
}

另外,如果从一个目录中加载模板, 你还需要给 FreeMarker 授权来从那个目录下读取文件, 使用如下的授权:

grant codeBase "file:/path/to/freemarker.jar" 
{
  ...
  permission java.io.FilePermission "/path/to/templates/-", "read";
}

最终,如果你使用默认的模板加载机制,也就是从当前文件夹下加载模板, 那么需要指定这些授权内容:(请注意,表达式 ${user.dir} 将会在运行时被策略解释器处理,几乎它就是一个 FreeMarker 模板)

grant codeBase "file:/path/to/freemarker.jar" 
{
  ...
  permission java.util.PropertyPermission "user.dir", "read";
  permission java.io.FilePermission "${user.dir}/-", "read";
}

很自然地,如果你在Windows下运行, 使用两个反斜杠来代替一个斜杠来分隔路径中的目录间隔。