如何将 java.io.FilePermission 添加(读取)到我的 /usr/share/java/mysql-connector-java.jar 以用于在 Ubuntu 上使用 MySQL 的 java applet?
我正在尝试让我的 java 程序在网络浏览器中工作。java 程序正在使用 MySQL 数据库,我已经成功地将它变成了一个 java-applet,它就像在 Eclipse IDE 中一样工作。但是,当我尝试在浏览器中查看小程序时它不起作用,并且当我尝试使用 appletviewer 运行它时,我收到错误消息:
“线程“游戏线程”中的异常 java.security.AccessControlException:访问被拒绝(java.io.FilePermission /usr/share/java/mysql-connector-java.jar 读取)”
我知道为了安全起见,最好在小程序和服务器之间放置一个 servlet,但现在我只希望当我使用 appletviewer 和在浏览器中运行小程序时,它可以在我的计算机上运行。
我在论坛上四处搜索,并检查了以下常见问题:
1)我已经正确设置了类路径(因为当我不将它作为小程序运行时它可以工作,并且因为我没有收到 classNotFound 错误),
2)我认为我的 html 文件正确,因为它正确加载了图形和 com.mysql.jdbc.Driver,它看起来像这样:
<HTML>
<HEAD>
<TITLE> MyAppletTitle </TITLE>
</HEAD>
<CENTER>
<APPLET
code="appletname"
archive="/usr/share/java/mysql-connector-java.jar"
WIDTH=1300 HEIGHT=700>
</APPLET>
</CENTER>
</HTML>
3)我在“/etc/java-6-openjdk/security”文件夹中的 java.policy 文件中尝试了各种变体,它对我在那里写的内容做出反应,所以我知道它是正确的 java 版本(不是 java -7 ...),但无论我授予什么权限,我都会拒绝相同的访问权限。我努力了:
grant codeBase "file:/usr/share/java/*" {
permission java.security.AllPermission;
};
grant codeBase "file:/usr/share/java/mysql-connector-java.jar" {
permission java.security.AllPermission;
};
grant codeBase "file:/usr/share/java/mysql-connector-java.jar" {
permission java.util.PropertyPermission "java.home", "read";
};
grant codeBase "file:/home/myusername/PathToApplet/*" {
permission java.security.AllPermission;
};
grant codeBase "file:/home/myusername/PathToApplet/*" {
permission java.util.PropertyPermission "java.home", "read";
};
4) 我尝试对使用的 .jar 文件进行签名,但在这里我遇到了一些问题:-我无法对位于 /usr/share/java/ 中的 jar 文件进行签名(我认为我不应该这样做?),-我的小程序不是可运行的 jar 文件,所以我不确定对我使用 Eclipse 创建的提取的 .jar 文件进行签名有什么好处。
5)我已经检查了我创建的数据库的 MySQL 数据库授权(特权),它应该是,因为它在 eclipse 中工作并且当我不将 java 程序作为 applet(但作为 JFrame)运行时,除非appletviewer 尝试以其他方式连接,而不是我告诉程序在某个奇怪的端口或其他什么东西上连接?
6) 我看到你可以用一些 doPrivileged 的东西来包装你的代码,但我不知道该怎么做。当我尝试使用命令 Class.forName(dbClassName); 加载 com.mysql.jdbc.Driver 时出现访问被拒绝错误;代码片段如下所示:
private static int[] GetWordIDs(int[] userinput) throws ClassNotFoundException, SQLException {
String dbClassName = "com.mysql.jdbc.Driver";
String url ="jdbc:mysql://127.0.0.1/DataBase1";
// Problems here, surround with doPrivileged something??
Class.forName(dbClassName);
.
.
.
我将如何围绕这个包装一些 doPrivileged 东西?
7) Eclipse 正在做一些使小程序工作而没有任何 java.io.Filepermission 问题的事情,我查看了它创建的 .classpath 和 .project 文件,但我不知道如何处理这些,也许我必须以某种方式使用这些?
8) 我什至已经将 mysql-connector-java-5.1.16-bin.jar 文件复制到了我的类路径中,但这也没有帮助。
我已经在这些问题上苦苦挣扎了一段时间,如果您能提供任何帮助,我将不胜感激!