如何允许我的Java applet使用MySQL?

我最近把我的业余爱好Java项目嵌入了页面thanks to this very site,但现在我遇到了一些安全问题.

我有包括:

import java.sql.*;

和行:

Class.forName("com.mysql.jdbc.Driver").newInstance();

以及我的src目录中的mysql .jar文件,它可以从控制台运行,并且在applet中可以正常工作 – 直到我的代码中的forName()行,它会抛出异常:

    Exception: com.mysql.jdbc.Driverjava.lang.ClassNotFoundException: com.mysql.jdbc.Driver
    java.security.AccessControlException: access denied (java.lang.RuntimePermission exitVM.-1)
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkExit(Unknown Source)
    at java.lang.Runtime.exit(Unknown Source)
    at java.lang.System.exit(Unknown Source)
    at applet.Database.connectDB(Database.java:80)
    etc...

我想我可以使用client.policy文件修复它,否则我可能需要编写一个抽象层,它使用服务器 – 客户端网络连接从服务器端查询…

我相信这里的Java大师可能知道最好的方法.

解决方法:

我认为安全异常实际上来自applet中的System.exit()调用,在Class.forName()之后.通常,您不允许在未签名的applet中调用System.exit(),因为它会关闭整个JVM.您是否检查了第80行是否实际上是Class.forName()行,或者第80行是否有某种异常处理程序,如果驱动程序未加载,它会尝试调用System.exit()?

无论如何,为了在你的applet中加载mysql jar文件,你需要将它包含在ARCHIVE属性中,如下所示:

<APPLET ARCHIVE="mysql.jar" CODEBASE="./src/" ...

一旦超过此阶段,您仍然需要以与Web服务器相同的IP号/主机名托管mysql服务器,并将其打开给可以访问您的applet的所有相同人员.正如托尼所说,出于安全原因,人们通常不会这样做.如果您可以控制应用服务器,并使用XML或其他一些数据交换方法将数据输出到applet,那么最好在服务器端编写一些东西.当然,如果您只是在尝试学习applet,那么它可能很好 – 但如果可能的话,请注意将mysql保留在防火墙后面.

上一篇:Java 1.7 applet CacheEntry阻止动态更新


下一篇:java-为什么不允许无符号小程序创建自定义ClassLoader?