0

如何将 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 文件复制到了我的类路径中,但这也没有帮助。


我已经在这些问题上苦苦挣扎了一段时间,如果您能提供任何帮助,我将不胜感激!

4

1 回答 1

0

java.security.AccessControlException:访问被拒绝(java.io.FilePermission /usr/share/java/mysql-connector-java.jar 读取

这意味着您需要:

  1. AllPermission覆盖该文件或目录的内容添加到小程序执行时处于活动状态的 .policy 文件中。
  2. 添加一个明确的java.io.FilePermission read同上。

    这并不意味着其他任何事情。因此,您的大部分帖子都无关紧要:特别是您的第 1、2、5、6 和 7 点。

  3. 签署 JAR 文件。这是迄今为止最好的解决方案。它解决了这个问题和许多其他问题。您的“小程序不是可运行的 jar 文件”这一事实与您是否应该对其进行签名无关。
于 2013-08-02T01:41:49.147 回答