在eclipse之外运行java应用程序时的安全异常

时间:2014-03-11 13:34:06

标签: java eclipse netbeans tomcat7 birt

我正在使用birt开发java web应用程序,当我从eclipse运行应用程序时它按预期工作,但是当我从netbeans运行它或者当我在tomcat上手动部署它时,它会出错

Caused by: java.lang.IllegalArgumentException: securityDomain should be null if setSecurityController() was never called
at org.mozilla.javascript.Context.compileImpl(Context.java:2340)
at org.mozilla.javascript.Context.compileString(Context.java:1359)
at org.mozilla.javascript.Context.compileString(Context.java:1348)
at org.eclipse.birt.report.engine.javascript.JavascriptEngine$3.run(JavascriptEngine.java:240)
at org.eclipse.birt.report.engine.javascript.JavascriptEngine$3.run(JavascriptEngine.java:1)

请问如何解决?

4 个答案:

答案 0 :(得分:2)

我几天前将此报告为关键bug 429944,您应该在bugzilla中投票支持它。

据我所知,有两种可能的解决方法:

选项1:如果可能,请禁用Tomcat服务器的安全管理。默认情况下它被禁用,但在您的上下文中它似乎不是。检查参数" -security"用于启动Tomcat,并尝试将其删除。

选项2:根据错误说明中的建议,有两种方法应该在birt的源代码中进行更改以便快速修复。

答案 1 :(得分:1)

在调用报告之前,请尝试将System.setSecurityManager(null);放入代码中。每个JVM实例只需要执行一次。

答案 2 :(得分:1)

您不应该停用安全管理器! 这里提示绕过错误:

Context context = Context.enter( );
context.setSecurityController( ScriptUtil.createSecurityController( ) );

这两行应解决问题。我发现在org.eclipse.birt.report.engine.javascript.JavascriptEngineFactory类文件中,所以基本上你更希望直接调用类JavascriptEngineFactory来以一种好的方式初始化所有内容。

答案 3 :(得分:0)

我使用birt运行时4.2.2而不是使用4.3.1版本, 即使没有禁用安全管理器,现在一切都工作正常。 谢谢你们所有人的帮助