applet与mysql通信时的java.security.AccessControlException

时间:2013-03-17 21:55:20

标签: java mysql applet noclassdeffounderror

我校的编程俱乐部正在启动辅导计划,我已经构建了一个Java applet,学生可以使用它来请求会话。 applet与具有存储教师可用性的表的数据库通信,并向用户显示可用时间。

首先:出于安全原因,我知道让applet直接与数据库通信是一个坏主意。话虽这么说,这是一个相当低风险的情况(没有“敏感”存储在数据库上),这个解决方案只是暂时的(我们目前没有能够运行tomcat的服务器,所以一切都需要完成客户端)。

applet GUI正确加载,但在初始化尝试访问数据库的类时,抛出java.security.AccessControlException ("java.lang.RuntimePermission" "setContextClassLoader")异常,并且未加载任何数据。我怎么解决这个问题?

编辑:我已经更改了我的代码,以便数据库通信与GUI在同一个线程上进行。现在我得到了这个例外:

Exception in thread "Thread-46" java.lang.NoClassDefFoundError: Could not initialize class com.mysql.jdbc.StringUtils
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:298)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at helpsessions.DBHandler.run(DBHandler.java:53)
at java.lang.Thread.run(Unknown Source)

1 个答案:

答案 0 :(得分:0)

默认情况下,Applet的安全模型非常有限,为了扩展applet可用的设施,您需要对applet进行签名,然后使用所需的扩展权限编写更新的安全策略。

您的第二个问题 - 未找到类 - 是因为驱动程序未随applet一起分发。

我参考Java 1.1发现了这一点。

  

如果您正在使用applet,那么您必须将这些JAR和类文件放在applet的codebase目录和/或归档位置

我不确定Java的最新版本有多相关,但我建议这是让applet可以使用驱动程序Jar的最佳选择。