在eclipse外部运行java应用程序时出现安全异常

piah890a  于 2021-07-09  发布在  Java
关注(0)|答案(4)|浏览(408)

我正在使用birt开发javaweb应用程序,当我从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)

请问怎么修?

wvmv3b1j

wvmv3b1j1#

试着把 System.setSecurityManager(null); 在你调用报告之前先输入你的代码。每个jvm示例只需执行一次。

ovfsdjhp

ovfsdjhp2#

我使用birt runtime 4.2.2而不是4.3.1版本,现在一切都正常了,即使没有禁用security manager。谢谢大家的帮助

0wi1tuuw

0wi1tuuw3#

几天前我把它报告为critical bug 429944,你应该在bugzilla投票支持它。
据我所知,有两种可能的解决方法:
选项1:如果可能,禁用tomcat服务器的安全管理。默认情况下,它是禁用的,但在您的上下文中似乎不是。检查参数“-security”是否用于启动tomcat,并尝试删除它。
选项2:正如错误描述中所建议的,有两种方法应该在birt的源代码中更改,以便快速修复。

bvpmtnay

bvpmtnay4#

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

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

这两条线应该能解决问题。我在一个房间里发现的 org.eclipse.birt.report.engine.javascript.JavascriptEngineFactory 类文件,所以基本上您希望直接调用类 JavascriptEngineFactory 以一种好的方式初始化一切。

相关问题