我是网络开发人员的新手,我正在App Engine上尝试Thymeleaf模板引擎。它到目前为止工作正常,除了我尝试方法(而不是简单属性)访问时总是得到java IllegalAccessException。
例如,使用这行HTML:
<div class="panel" th:id="${item.getWebId()}">
我明白了:
java.lang.IllegalAccessException:
Method [public java.lang.String myapp.ItemInfo.getWebId()] cannot be accessed.
at ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:851)
在开发服务器(Win Vista)和GAE SDK的1.9.0和1.8.9的生产中都会发生这种情况。我已经尝试了当前的TL(2.1.2)和之前的版本(2.0.20)。我没有使用Spring。
我发现其他人在TL论坛上有反思问题(here和here),但没有任何帮助。
有些人使用Struts或Spring很久以前遇到过类似的问题,并通过设置OgnlRuntime.setSecurityManager(null)来解决它们。我没有追求这个,因为我看不到如何在TL中访问OgnlRuntime对象,对我来说没有多大意义,我将是唯一需要这个的TL用户。
看看OgnlRuntime v3.0.6 (here)看起来最简单的解决方案就是禁用'checkPermission',但是再次,作为TL的新手,我犹豫是否要做出TL不会暴露的更改,以及没有人使用TL似乎需要做。一定有别的错吗?
答案 0 :(得分:0)
最后,我继续使用OgnlRuntime.setSecurityManager(null)选项。这似乎是一个坏主意,但它允许我现在继续。
这是我使用的代码:
public class MyContextListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent arg0) {
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
OgnlRuntime.setSecurityManager(null);
}
}
在我的web.xml中,我添加了:
<listener>
<listener-class>com.myapp.MyContextListener</listener-class>
</listener>