签名Java小程序在连接到Web服务时引发安全异常
我有一个java小程序在Tomcat5.5上运行。它已签名(-selfcert)。当我的小程序尝试连接到Web服务(已在此行中)时,我仍然会遇到签名Java小程序在连接到Web服务时引发安全异常,java,applet,signed,self-signed,securityexception,Java,Applet,Signed,Self Signed,Securityexception,我有一个java小程序在Tomcat5.5上运行。它已签名(-selfcert)。当我的小程序尝试连接到Web服务(已在此行中)时,我仍然会遇到java.security.AccessControlException:access denied(java.lang.RuntimePermission createClassLoader)异常: 因为这里有一些类似的问题,我读到: 是,小程序已签名。我用-verify检查了一下 Tomcat安全例外,可能是,但我已添加到catalina.poli
java.security.AccessControlException:access denied(java.lang.RuntimePermission createClassLoader)
异常:
因为这里有一些类似的问题,我读到:
- 是,小程序已签名。我用-verify检查了一下
- Tomcat安全例外,可能是,但我已添加到catalina.policy:
grant codeBase "file:/home/me/apache-tomcat-5.5.27/webapps/myapplet/-" { permission java.security.AllPermission; };
grant codeBase”文件:/home/me/apache-tomcat-5.5.27/webapps/myapplet/applet.jar“{permission java.security.AllPermission;}代码>
grant codeBase "file:${java.home}/jre/lib/ext/-" {
permission java.security.AllPermission;
};
没有结果
好,快速更新,添加:
grant{
permission java.security.AllPermission;
};
到本地java.policy文件修复了该问题。但这不是我想要的,小程序应该在avarage机器上运行,带有dafault java.policy文件。因此必须从代码中修复它。您是从applet主线程调用WS,还是从使用javascript调用applet方法启动的线程调用WS 见下面的例子 希望能有帮助
public class MyApplet extends JApplet {
@Override
public void start() {
// It will work if your applet is signed
callWebService();
}
public void methodCalledFromJavascriptWrong() {
// It will NOT work even if your applet is signed
callWebService();
}
public void methodCalledFromJavascriptGood() {
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
// It will work if your applet is signed
callWebService();
return null;
}
});
}
private void callWebService() {
//Here you call your web service
}
}
您是从applet主线程调用WS,还是从使用javascript调用applet方法启动的线程调用WS 见下面的例子 希望能有帮助
public class MyApplet extends JApplet {
@Override
public void start() {
// It will work if your applet is signed
callWebService();
}
public void methodCalledFromJavascriptWrong() {
// It will NOT work even if your applet is signed
callWebService();
}
public void methodCalledFromJavascriptGood() {
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
// It will work if your applet is signed
callWebService();
return null;
}
});
}
private void callWebService() {
//Here you call your web service
}
}
如果您正在使用小程序中的其他库(JAR),这些库与任何受限制的资源相互作用,它们也应该被签名。
因此,请给出整个stacktrace和My_WebserviceLocator。(并且不要使用下划线)。例如,尝试对axis.jar进行签名。如果您正在使用小程序中与任何受限资源交互的其他库(jar),那么也应该对它们进行签名。
因此,请给出整个stacktrace和My_WebserviceLocator。(并且不要使用下划线)。例如,尝试对axis.jar进行签名。作为临时解决方案,您可以禁用SecurityManager。当然,这会有一些安全问题,但至少您可以跟踪到SecurityManager(即权限问题)
如果这确实有效,我猜您配置了错误的策略文件。从浏览器运行小程序时,我几乎可以肯定小程序启动器将是一个普通的消费者JRE,而不是与JDK捆绑在一起的JRE。作为一种临时解决办法,您可以禁用SecurityManager。当然,这会有一些安全问题,但至少您可以跟踪到SecurityManager(即权限问题)
如果这确实有效,我猜您配置了错误的策略文件。从浏览器运行小程序时,我几乎可以肯定小程序启动器将是一个普通的消费者JRE,而不是与JDK捆绑在一起的JRE。在服务器上设置权限不是解决方案。浏览器中的安全管理员会抱怨 建议使用AccessManager是indead强制的,否则将失败。 但在从start()或init()调用webservice时,也需要执行相同的操作 我可以问一下:Web服务调用是您拥有小程序的唯一原因吗?最好放置一个代理servlet,以避免相同的域策略限制。然后您可以在浏览器中使用纯HTML+Javascript
如果在小程序完全启动之前从JS调用小程序,则可能会失败,因此应等待小程序准备就绪。在服务器上设置权限不是解决方案。浏览器中的安全管理员会抱怨 建议使用AccessManager是indead强制的,否则将失败。 但在从start()或init()调用webservice时,也需要执行相同的操作 我可以问一下:Web服务调用是您拥有小程序的唯一原因吗?最好放置一个代理servlet,以避免相同的域策略限制。然后您可以在浏览器中使用纯HTML+Javascript
如果在小程序完全启动之前调用JS中的小程序,则可能会失败,因此您应该等待小程序准备就绪。不是这样,否则小程序不会启动,小程序会启动,并且除了创建ws_定位器和粗略连接到webserviceLaurent K之外,所有功能都可以工作,你能解释一下为什么会这样吗?有没有什么解决办法,这样我就不用一直玩特权动作了?具体在哪里解释?我有一个调用javax.smartcardio的小程序,大部分时间是通过Javascript调用的。我见过一些技巧,比如为智能卡访问创建一个特权线程,但这对我来说太过工程化了。谢谢,这是我的问题,当从javascript调用时,事情不起作用。不,不是这样,否则小程序不会启动,小程序确实启动了,除了创建ws_定位器和粗略连接到webserviceLaurent K之外,所有功能都正常工作,您能解释一下为什么会这样吗?有没有什么解决办法,这样我就不用一直玩特权动作了?具体在哪里解释?我有一个调用javax.smartcardio的小程序,大部分时间是通过Javascript调用的。我见过一些技巧,比如为智能卡访问创建一个特权线程,但这对我来说太过工程化了。谢谢,这是我的问题,当从javascript调用时,事情不起作用。给整个stacktrace+my_WebServiceLocator好吧,你还没有给整个stacktrace.Wth。安斯威尔当选。那太糟糕了。给整个stacktrace+My_WebServiceLocator好吧,你还没有给整个stacktrace.Wth。安斯威尔当选。这太糟糕了。正如我在另一个answear的评论中所写的那样,小程序确实启动了,它完成了所有应该做的事情,除非我在某个地方,任何你在问题中看到的代码行中写下。axis2 Web服务存根
System.setSecurityManager(null);