使用JApplet连接到SQL

时间:2014-04-25 21:19:27

标签: java swing applet japplet securityexception

我正在尝试使用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使用套接字的权限?

3 个答案:

答案 0 :(得分:2)

见这些:

java.net.SocketPermission in Applet

Can signed applets connect with a different host from which they originate?

如果您的小程序未签名,则需要确保您的小程序为 是从它试图打开套接字的服务器加载的 然后这将工作。

答案 1 :(得分:1)

未签名的小程序应用了多个restrictions。其中一个限制是它们无法打开与托管applet的主机之外的主机的网络连接。

有几种解决方法:

  1. Sign the applet。显而易见的问题是您需要一个应用程序签名证书。
  2. 将DB服务器托管在与applet相同的计算机上。
  3. 改为编写WebStart应用程序(尽管它可能存在同样的问题)。

答案 2 :(得分:0)

这是java 8中的一个新的破坏 - 它似乎是沙盒小程序 根本不允许使用套接字。

部分解决方案是更改applet以请求所有权限。这个 更改用户必须点击的可怕对话框,但不多 比他已经不得更加不祥。

- 当然,由于以前的安全健美操,罐子有 使用可信证书签名。