HTML 中嵌入 jar 的 Java Applet 安全问题

标签 java applet japplet

我将一个小程序嵌入到 HTML 页面中。该小程序还使用 MySQL jar 文件。

没有 MySQL jar 文件它也能正常工作。从本地网络服务器或托管网络服务器执行它时,会出现以下错误:

Exception in thread "AWT-EventQueue-2" java.lang.ExceptionInInitializerError
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:286)
at java.sql.DriverManager.getConnection(Unknown Source)
.........
Caused by: java.security.AccessControlException: access denied ("java.util.PropertyPermission" "file.encoding" "read")
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)

我的文件列表:

/appletTest.html
/mysql-connector-java-5.1.18-bin.jar
/applet/testApplet.class

testApplet.class:

package applet;

import java.applet.Applet;
import java.awt.Graphics;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class HelloWorldApplet extends Applet {

@Override
public void paint(Graphics g) {
    g.drawString("Hello World", 25, 50);

    Connection con = null;
    Statement st = null;
    ResultSet rs = null;

    String url = "jdbc:mysql://localhost:3306/testdb";

    try {
        con = DriverManager.getConnection(url, "root", ""); // <= here fails
        st = con.createStatement();
        rs = st.executeQuery("SELECT VERSION()");

        if (rs.next()) {
            g.drawString(rs.getString(1), 25, 50);
        }

    } catch (SQLException ex) {
        System.out.println(ex);
    } 
  }
}

appletTest.html:

<html>
  <head>
  <title>Applet Test</title>
  </head>
   <body>
      <applet code="applet.testApplet.class" width="500" height="300" archive="mysql-connector-java-5.1.18-bin.jar">
      </applet>
   </body>
</html>

我认为出现此安全错误是因为除非您“签名”或“更改本地安全策略”,否则小程序无法访问本地资源。但我的所有文件都位于网络服务器上,并且小程序请求的 jar 文件也位于网络服务器上。

所以,我在这里没有看到本地文件请求,但仍然收到此错误。您能给我一些建议吗?

最佳答案

"Ordinarily, unsigned Java applets or applications may only connect back to the web server from which they originated. This restriction prevents an applet from causing denial-of-service attacks by making rapid connections to arbitrary machines on the Internet."

当您进行测试时,请确保您与网络服务器位于同一域中。 即使您访问本地主机,file:///.../appletTest.html也不会工作。

该行:String url = "jdbc:mysql://localhost:3306/testdb"; 需要更改为您的网络服务器的地址。

[编辑] 每次调用 paint() 时打开一个新连接不是很愚蠢吗?

[编辑] 我更仔细地阅读了您的帖子。问题是您无法访问 jar 文件。最简单的方法是将驱动程序打包在与小程序相同的 jar 中。

关于HTML 中嵌入 jar 的 Java Applet 安全问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15073967/

相关文章:

java - Guava 多重映射到响应模型的映射结果

java - 从小程序调用javascript方法时出错

java - 不断收到 "java.security.AccessControlException access denied:"错误

Java applet 不会在浏览器中绘制或接受鼠标输入,但在 Eclipse Appletviewer 中会绘制或接受鼠标输入

java - Spring Web Flow - 页面上的多个表单 - 验证正确的表单

java - Java 链表数组

java - Spring SOAP Web 服务 - 显示来自数据库/路径的图像

java - 如何从浏览器上运行的小程序访问计算机驱动器

java - 如何在 Graphics 中成功使用 Thread.sleep() 方法?

java - 无法使用 JDK 7u21 和 7u25 调试小程序