我正在尝试使用JApplet连接到SQL数据库。但是,我得到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,但这没有用。如何授予对applet使用套接字的权限?
答案 0 :(得分:2)
见这些:
java.net.SocketPermission in Applet
Can signed applets connect with a different host from which they originate?
如果您的小程序未签名,则需要确保您的小程序为 是从它试图打开套接字的服务器加载的 然后这将工作。
答案 1 :(得分:1)
未签名的小程序应用了多个restrictions。其中一个限制是它们无法打开与托管applet的主机之外的主机的网络连接。
有几种解决方法:
答案 2 :(得分:0)
这是java 8中的一个新的破坏 - 它似乎是沙盒小程序 根本不允许使用套接字。
部分解决方案是更改applet以请求所有权限。这个 更改用户必须点击的可怕对话框,但不多 比他已经不得更加不祥。
- 当然,由于以前的安全健美操,罐子有 使用可信证书签名。