带有GAE / J的Rythm模板引擎:甚至最简单的情况下的AccessControlException

时间:2014-01-02 11:06:57

标签: java google-app-engine maven rythm

我正在尝试使用Google App Engine / Java devserver(GAE / J)上的Rythm template engine。这是一个简单的安装,只有Rythm添加到基础GAE devserver。

问题Rythm template engine and GAE并没有完全回答我的问题(答案中指出的源代码给出了404错误)。

首先将以下代码添加到我的servlet代码中:

response.getWriter().println(Rythm.render("Successfully logged in as: @who",
                user.getNickname()));

我得到了:

java.security.AccessControlException: access denied ("java.io.FilePermission" "/var/folders/91/nv5sbz412b188nk22m644mq80000gn/T/__rythm" "read")

我认为这种情况正在发生,因为Rythm模板引擎会尝试查看/var以查看是否将第一个参数作为文件名处理为Rythm.render,并且GAE会抛出AccessControlException因为你不应该在战争之外访问文件系统。

然后我在调用Rythm.render之前添加了以下行(这些行基本上是从Rythm的HelloWorld example复制并粘贴的):

// use Map to store the configuration
Map<String, Object> map = new HashMap<String, Object>();
// tell rythm where to find the template files
map.put("home.template", ".");
// init Rythm with our predefined configuration
Rythm.init(map);

仍然得到同样的例外。改变“。”以“{”作为home.template的值给出:

access denied ("java.io.FilePermission" "/Successfully logged in as: @who" "read")

当我尝试时:

map.put("home.template", this.getServletContext().getRealPath("/"));

我仍然得到同样的例外。 Rythm为什么要看/var/folders/91/nv5sbz412b188nk22m644mq80000gn/T/__rythm?堆栈跟踪位于:https://drive.google.com/file/d/0B6dOUTDGuy2AWjR3Tmt2WTlkOUE/edit?usp=sharing(是否有更好的方法来共享堆栈跟踪?)

需要帮助!

以下是版本:

  • GAE:1.8.7
  • Maven:3.1.1
  • Rythm:1.0-b11-SNAPSHOT
  • OS:OS X 10.9

1 个答案:

答案 0 :(得分:1)

您需要禁用engine.file_write配置以允许Rythm使用GAE。在http://rythmengine.org/doc/configuration.md#engine_file_write_enabled

上查看有关配置的详情