Java-апплет AccessControlException в сторонней библиотеке - PullRequest
1 голос
/ 03 сентября 2011

Я использую стороннюю библиотеку (jar) в своем java-апплете и получаю эту ошибку:

java.security.AccessControlException: access denied ("java.util.PropertyPermission" "*" "read,write")
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPropertiesAccess(Unknown Source)
    at java.lang.System.getProperties(Unknown Source)
    at sfs2x.client.core.sockets.TCPSocketLayer.initNetty(TCPSocketLayer.java:63)
    at sfs2x.client.core.sockets.TCPSocketLayer.<init>(TCPSocketLayer.java:59)
    at sfs2x.client.bitswarm.BitSwarmClient.init(BitSwarmClient.java:90)
    at sfs2x.client.SmartFox.initialize(SmartFox.java:148)
    at sfs2x.client.SmartFox.<init>(SmartFox.java:127)
    at bfwd.RedemptionOnline.Client.RedemptionOnlineApplet.init(RedemptionOnlineApplet.java:29)
    at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter.init(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

Я тестирую это на своем сервере разработки и пытаюсь подключиться к localhost,Почему я получаю эту ошибку сейчас, и как бы я мог предотвратить ее в будущем?

Хорошо, я даже сам подписал свою банку, но она по-прежнему появляется с этой ошибкой.

1 Ответ

0 голосов
/ 03 сентября 2011
at sfs2x.client.core.sockets.TCPSocketLayer.initNetty(TCPSocketLayer.java:63)

SFS2X представляется игровым сервером. Netty является сервером TCP / IP. Почему вы пытаетесь запустить игровой сервер на стороне клиента? Я не уверен, что посетители вашей веб-страницы будут когда-либо довольны этим. Какое функциональное требование в конце концов? Рассматривали ли вы, чтобы ваш веб-сервер выполнял эту работу?

Несмотря на это, вам нужно подписать апплет, чтобы заставить его работать. Неподписанные апплеты имеют очень строгие правила безопасности (в противном случае было бы очень легко вытащить весь «Мои документы» и отправить его, например, на сервер). По сути, вам нужно отправить свой код какой-либо подписывающей компании RSA и попросить их просмотреть код и получить обратно некоторый сертификат RSA, который вы предоставляете вместе со своим апплетом, чтобы клиенты знали, что это надежное программное обеспечение.

Вы также можете подписать апплет самодельным сертификатом, который действителен всего 6 месяцев. Но конечный пользователь все равно получит предупреждение безопасности, когда ваш апплет должен быть загружен; у конечного пользователя запрашивается подтверждение, является ли оно действительно доверенным программным обеспечением и может быть выполнено. Однако вам все еще нужно обернуть основной апплет init() внутри AccessController#doPrivileged().

public void init() {
    AccessController.doPrivileged(new PrivilegedAction<Void>() {
        @Override public Void run() {
            // Put your original init() here.
        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...