Я пытаюсь подключиться к базе данных SQL с помощью JApplet. Однако я получаю SecurityException
:
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
java.net.SocketException
MESSAGE: java.security.AccessControlException: access denied ("java.net.SocketPermission" "162.243.229.150:3306" "connect,resolve")
STACKTRACE:
java.net.SocketException: java.security.AccessControlException: access denied ("java.net.SocketPermission" "162.243.229.150:3306" "connect,resolve")
at com.mysql.jdbc.StandardSocketFactory.unwrapExceptionToProperClassAndThrowIt(StandardSocketFactory.java:407)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:268)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:271)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2771)
at com.mysql.jdbc.Connection.<init>(Connection.java:1555)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:270)
at me.nrubin29.cubesorter.MySQL.setup(MySQL.java:24)
at me.nrubin29.cubesorter.MySQL.access$100(MySQL.java:8)
at me.nrubin29.cubesorter.MySQL$1.run(MySQL.java:35)
at java.lang.Thread.run(Thread.java:744)
** END NESTED EXCEPTION **
Last packet sent to the server was 1 ms ago.
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2847)
at com.mysql.jdbc.Connection.<init>(Connection.java:1555)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:270)
at me.nrubin29.cubesorter.MySQL.setup(MySQL.java:24)
at me.nrubin29.cubesorter.MySQL.access$100(MySQL.java:8)
at me.nrubin29.cubesorter.MySQL$1.run(MySQL.java:35)
at java.lang.Thread.run(Thread.java:744)
Exception in thread "Thread-38" java.lang.NullPointerException
at me.nrubin29.cubesorter.MySQL$1.run(MySQL.java:38)
at java.lang.Thread.run(Thread.java:744)
Я попытался использовать AccessController # doPrivileged, но это не помогло. Как предоставить разрешение на использование сокета с моим апплетом?
Неподписанные апплеты имеют к ним ряд ограничений. Одним из ограничений является то, что они не могут открывать сетевые подключения к хостам, отличным от того, на котором размещается апплет.
Существует несколько способов:
Смотрите:
java.net.SocketPermission в Applet
Могут ли подписанные апплеты подключаться к другому хосту, из которого они происходят?
Если ваш апплет не подписан, вам нужно убедиться, что ваш апплет
загружается с сервера, к которому он пытается открыть сокет.
Тогда это сработает.
Это новый поломка в java 8 - кажется, что изолированным апплетам запрещено использовать сокеты вообще.
Частичным решением является изменение апплета для запроса всех разрешений. Это изменяет страшные диалоги, которые пользователь должен немного щелкнуть, но не намного более зловещий, чем он уже должен.
- и, конечно, из-за предыдущей проверки работоспособности, банки должны быть подписаны с использованием доверенного сертификата.