首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >进行Thymeleaf/OGNL方法访问的IllegalAccessException

进行Thymeleaf/OGNL方法访问的IllegalAccessException
EN

Stack Overflow用户
提问于 2014-03-11 01:09:43
回答 1查看 445关注 0票数 1

我对web很陌生,我正在应用程序引擎上尝试Thymeleaf模板引擎。到目前为止,它运行得很好,只是当我尝试方法(相对于简单属性)访问时,总是会得到异常。

例如,使用这行HTML:

代码语言:javascript
复制
<div class="panel" th:id="${item.getWebId()}">

我得到:

代码语言:javascript
复制
java.lang.IllegalAccessException:
Method [public java.lang.String myapp.ItemInfo.getWebId()] cannot be accessed.
at ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:851) 

这既发生在dev服务器(Win Vista)上,也发生在GAE SDK的1.9.0和1.8.9的生产中。我已经尝试过当前的TL (2.1.2)和以前的版本(2.0.20)。我不使用Spring。

我发现其他人在TL论坛上有反射问题(这里这里),但没有任何帮助。

一些使用Struts或Spring的人很久以前就遇到了类似的问题,并通过设置OgnlRuntime.setSecurityManager(null)来解决这些问题。我之所以没有这样做,是因为我看不出如何在TL中访问OgnlRuntime对象,而且对我来说,我是唯一需要这样做的TL用户也没有什么意义。

OgnlRuntime v3.0.6 (此处)的角度来看,最简单的解决方案似乎是禁用“checkPermission”,但作为TL新手,我不太愿意做TL不公开的更改,而且其他使用TL的人似乎也不需要这样做。一定还有什么不对劲吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-11 14:18:10

最后,我继续使用OgnlRuntime.setSecurityManager(null)选项。这似乎是个坏主意,但我现在可以继续下去了。

下面是我使用的代码:

代码语言:javascript
复制
public class MyContextListener implements ServletContextListener {
    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
    }
    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        OgnlRuntime.setSecurityManager(null);
    }
}

在我的web.xml中,我补充道:

代码语言:javascript
复制
<listener>
    <listener-class>com.myapp.MyContextListener</listener-class>
</listener>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22314530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档