Подключитесь к SQL с помощью JApplet

1

Я пытаюсь подключиться к базе данных 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, но это не помогло. Как предоставить разрешение на использование сокета с моим апплетом?

  • 0
    Находятся ли апплет и БД на одном сервере? Почему апплету разрешено напрямую взаимодействовать с БД? Он должен быть вынужден работать через веб-интерфейс API.
  • 0
    Они находятся на одном сервере. Я разрешаю прямое соединение, потому что я не знаю, как написать веб-API.
Показать ещё 1 комментарий
Теги:
swing
applet
securityexception
japplet

3 ответа

1
Лучший ответ

Неподписанные апплеты имеют к ним ряд ограничений. Одним из ограничений является то, что они не могут открывать сетевые подключения к хостам, отличным от того, на котором размещается апплет.

Существует несколько способов:

  1. Подпишите апплет. Очевидная проблема заключается в том, что вам нужен сертификат подписи приложения.
  2. Узел сервера БД на том же компьютере, что и апплет.
  3. Вместо этого напишите приложение WebStart (хотя, вероятно, оно имеет ту же проблему).
  • 0
    Сервер MySQL находится на том же сервере, что и веб-сервер.
  • 0
    @ nrubin29 Используете ли вы один и тот же IP-адрес из апплета и веб-сервера?
Показать ещё 1 комментарий
2

Смотрите:

java.net.SocketPermission в Applet

Могут ли подписанные апплеты подключаться к другому хосту, из которого они происходят?

Если ваш апплет не подписан, вам нужно убедиться, что ваш апплет
загружается с сервера, к которому он пытается открыть сокет.
Тогда это сработает.

0

Это новый поломка в java 8 - кажется, что изолированным апплетам запрещено использовать сокеты вообще.

Частичным решением является изменение апплета для запроса всех разрешений. Это изменяет страшные диалоги, которые пользователь должен немного щелкнуть, но не намного более зловещий, чем он уже должен.

- и, конечно, из-за предыдущей проверки работоспособности, банки должны быть подписаны с использованием доверенного сертификата.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню