即使对于签名的applet,允许的特权操作是否存在某种限制?这是堆栈跟踪:
Exception in thread "AWT-EventQueue-2" java.security.AccessControlException: access denied (java.lang.RuntimePermission loadLibrary.skype)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
at java.security.AccessController.checkPermission(AccessController.java:546)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.lang.SecurityManager.checkLink(SecurityManager.java:818)
at java.lang.Runtime.loadLibrary0(Runtime.java:817)
at java.lang.System.loadLibrary(System.java:1045)
at com.skype.connector.ConnectorUtils.loadLibrary(ConnectorUtils.java:321)
at com.skype.connector.osx.SkypeFramework.init(SkypeFramework.java:44)
at com.skype.connector.osx.OSXConnector.initializeImpl(OSXConnector.java:107)
at com.skype.connector.Connector.initialize(Connector.java:485)
at com.skype.connector.osx.OSXConnector.isRunning(OSXConnector.java:86)
at com.skype.Skype.isRunning(Skype.java:172)
答案 0 :(得分:1)
发现问题。特权操作在我的applet中,我的applet的jar已签名,但需要特权的代码在另一个未签名的jar中。签署其他jar修复了问题。另一件事是,即使我从特权行动包装中取出呼叫,只要罐子签名,它仍然可以工作。
答案 1 :(得分:-1)
即使对于签名的applet,允许的特权操作是否存在某种限制?
我希望如此,因为一个受信任的applet(不涉及任何JS)无法调用某些方法(例如System.exit(int)
)。虽然受信任的applet或JWS应用程序具有更多许可安全管理器,但他们仍拥有安全管理器。
您可以尝试在代码到达该点之前调用System.setSecurityManager(null)
来测试该理论。如果结果现在可以使用,请不要将其用作生产代码,而是安装允许当前权限以及特定权限的自定义SecurityManager
。