Java 使用JApplet连接到SQL

Java 使用JApplet连接到SQL,java,swing,applet,japplet,securityexception,Java,Swing,Applet,Japplet,Securityexception,我正在尝试使用JApplet连接到SQL数据库。但是,我得到了一个安全异常: com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: ** BEGIN NESTED EXCEPTION ** java.net.SocketException MESSAGE: java.security.AccessControlException: access de

我正在尝试使用JApplet连接到SQL数据库。但是,我得到了一个
安全异常

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)
com.mysql.jdbc.CommunicationsException:由于底层异常导致的通信链路故障:
**开始嵌套异常**
java.net.SocketException
消息:java.security.AccessControlException:拒绝访问(“java.net.SocketPermission”162.243.229.150:3306“连接,解析”)
堆栈跟踪:
java.net.SocketException:java.security.AccessControlException:access-denied(“java.net.SocketPermission”162.243.229.150:3306“连接,解析”)
位于com.mysql.jdbc.StandardSocketFactory.UnwapeExceptionTopropertCassandThrowit(StandardSocketFactory.java:407)
位于com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:268)
在com.mysql.jdbc.MysqlIO上(MysqlIO.java:271)
在com.mysql.jdbc.Connection.createNewIO上(Connection.java:2771)
位于com.mysql.jdbc.Connection(Connection.java:1555)
位于com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
位于java.sql.DriverManager.getConnection(DriverManager.java:664)
位于java.sql.DriverManager.getConnection(DriverManager.java:270)
在me.nrubin29.cubesorter.MySQL.setup(MySQL.java:24)
在me.nrubin29.cubesorter.MySQL.access$100(MySQL.java:8)
在me.nrubin29.cubesorter.MySQL$1.run(MySQL.java:35)
运行(Thread.java:744)
**结束嵌套异常**
发送到服务器的最后一个数据包是1毫秒前。
位于com.mysql.jdbc.Connection.createNewIO(Connection.java:2847)
位于com.mysql.jdbc.Connection(Connection.java:1555)
位于com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
位于java.sql.DriverManager.getConnection(DriverManager.java:664)
位于java.sql.DriverManager.getConnection(DriverManager.java:270)
在me.nrubin29.cubesorter.MySQL.setup(MySQL.java:24)
在me.nrubin29.cubesorter.MySQL.access$100(MySQL.java:8)
在me.nrubin29.cubesorter.MySQL$1.run(MySQL.java:35)
运行(Thread.java:744)
线程“thread-38”java.lang.NullPointerException中的异常
在me.nrubin29.cubesorter.MySQL$1.run(MySQL.java:38)
运行(Thread.java:744)
我试过用,但没用。如何授予在小程序中使用套接字的权限?

请参见以下内容:

如果小程序未签名,则需要确保小程序
从试图打开套接字的服务器加载。

这样就行了

未签名的小程序有许多应用程序。其中一个限制是,它们无法打开与承载小程序的主机以外的主机的网络连接

有几种方法可以解决这个问题:

  • 。明显的问题是,您需要应用程序签名证书
  • 将数据库服务器托管在与小程序相同的计算机上
  • 改为编写WebStart应用程序(尽管它可能有相同的问题)

  • 这是Java8中的一个新的破坏——看起来沙盒小程序 根本不允许使用套接字

    部分解决方案是将小程序更改为请求所有权限。这 改变了可怕的对话框,用户只需点击一点,但不会点击太多 比他已经不得不做的更不祥

    --当然,由于之前的安全演习,罐子已经
    使用受信任的证书进行签名。

    MySQL服务器与web服务器位于同一服务器上。@nrubin29您使用的是来自小程序和web服务器的相同IP/地址吗?我尝试了以下方法:
    字符串数据库;if(Viewer.DESKTOP)数据库=“--”;else database=“localhost”。我还在末尾添加了
    :3306
    ,所以不用担心。这是一个新错误:
    消息:java.security.AccessControlException:拒绝访问(“java.net.SocketPermission”“[fe80:0:0:0:0:0:1%1]:3306”“连接,解析”)
    小程序和数据库在同一台服务器上吗?为什么允许小程序直接与数据库交互?应该强制它通过基于web的API工作。它们位于同一台服务器上。我之所以允许直接连接,是因为我不知道如何编写基于web的API。这是Java8中的一种新行为。可能是同一个问题