为什么FTP服务器上的自签名小程序无法连接到MySQL数据库

时间:2012-07-19 13:24:44

标签: java mysql database applet

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

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

  • 如果我在本地运行applet,它可以正常工作。
  • 如果我从网络浏览器本地启动applet,它也可以完美运行。
  • 但是当我将它上传到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();
        }

2 个答案:

答案 0 :(得分:2)

我似乎已经自己回答了这个问题。问题是,从尝试连接到数据库,到一个完整的工作连接需要大约3分钟左右。从技术上讲,这个问题一直都是空洞的。我会看看我是否可以找到它为何如此缓慢并提出另一个问题,如果我找不到它。

所以再一次,它与策略或权限无关。由于某种原因,只是因为地狱而缓慢。

答案 1 :(得分:0)

我认为这是因为,当您从服务器运行applet时,Java Plug-in会强制使用严格的沙箱来防止执行恶意操作。其中之一是建立与其他计算机的连接。

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

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