2

我正在处理上传到 ftp 服务器的小程序。该小程序应该连接到 MySQL 数据库(据我所知,它应该在同一台服务器上)。

注意:小程序是自签名的。

  • 如果我在本地运行小程序,它工作正常。
  • 如果我从网络浏览器本地启动小程序,它也可以完美运行。
  • 但是当我将它上传到 ftp 服务器并从它的网站启动它时,它会在第 4 行冻结(DriverManager.getConnection() 方法)

.

public static void initConnection(final Settings info) throws ClassNotFoundException, SQLException
        {
            Class.forName("com.mysql.jdbc.Driver");
            Connection conn = DriverManager.getConnection("jdbc:mysql://" + info.getHost() + ":3306/" + info.getDbName(),
                    info.getUser(), info.getPass());
            stmt = conn.createStatement();
        }
4

2 回答 2

2

看来我自己已经回答了这个问题。问题是,从尝试连接到数据库,到有一个完整的工作连接大约需要 3 分钟左右。从技术上讲,这个问题一直是无效的。我会看看我是否能找出它为什么这么慢,如果我找不到它,我会问另一个问题。

所以再一次,它与策略或权限无关。只是因为某种原因慢得要命。

于 2012-07-19T21:33:50.327 回答
0

我认为这是因为,当您从服务器运行小程序时,Java 插件会强加一个严格的沙箱以防止执行恶意操作。其中之一是建立与其他计算机的连接。

只需编写一个策略文件,允许连接到数据库主机的端口 3306(用于policytool生成它;您需要使用和操作授予数据库主机的java.net.SocketPermission权限),然后将其嵌入到 JAR 中,并在代码,使用该文件创建一个安全管理器(这里是一个示例)。resolveconnect

编辑:我从 AppletViewer 日志中注意到,当从远程位置启动代码时,您使用的解密类需要另一个默认情况下未授予的权限。按照上面的技术,但也授予权限java.lang.RuntimePermission(操作accessClassInPackage.sun.misc:),你应该没问题。

于 2012-07-19T13:35:19.093 回答