Подписанный апплет, выполняющий действие PrivilegedAction, по-прежнему завершается ошибкой с AccessControlException - PullRequest
1 голос
/ 03 мая 2011

Есть ли какое-то ограничение на то, какие привилегированные действия разрешены даже для подписанных апплетов? Вот трассировка стека:

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)

Ответы [ 2 ]

1 голос
/ 04 мая 2011

Нашел проблему.Привилегированное действие находится в моем апплете, и jar моего апплета подписан, но код, которому нужны привилегии, находится в другом jar, который не подписан.Подписание этой другой банки решило проблему.Другое дело, что даже когда я вынул вызов из привилегированной оболочки действий, он все еще работает, пока подписаны банки.

0 голосов
/ 03 мая 2011

Есть ли какое-то ограничение на то, какие привилегированные действия разрешены даже для подписанных апплетов?

Я бы ожидал, так как доверенный апплет (без участия JS) не может вызывать некоторые методы (например, System.exit(int)). В то время как доверенный апплет или приложение JWS имеют гораздо более разрешающий диспетчер безопасности, они все еще имеют диспетчер безопасности.

Вы можете попробовать позвонить System.setSecurityManager(null) до того, как код достигнет этой точки, чтобы проверить эту теорию. Если выясняется, что теперь это работает, не используйте его в качестве рабочего кода, вместо этого установите пользовательский SecurityManager, который разрешает текущие и особые права доступа.

...