Servlets 可以做什么和不能做什么

当用户访问包含 Servlets 的页面时,JavaServlets 会加载到 Client 端上。 JavaServlets 背后的安全模型的设计目标是保护用户免受恶意 Servlets 的侵害。

Servlets 可以是沙箱 Servlets,也可以是特权 Servlets。沙箱 Servlets 在仅允许一组安全操作的安全沙箱中运行。特权 Servlets 可以在安全沙箱外部运行,并且具有访问 Client 端的广泛功能。

未签名的 Servlets 仅限于安全沙箱,并且仅在用户接受 Servlets 时运行。由来自公认的证书颁发机构的证书签名的 Servlets 可以仅在沙箱中运行,也可以请求在沙箱外部运行的权限。在这两种情况下,用户都必须接受 Servlets 的安全证书,否则,Servlets 将无法运行。

建议您使用 Java 网络启动协议(JNLP)启动 Servlets,以利用扩展的功能并改善用户体验。有关 applet 部署的逐步说明,请参见部署 Servlets

建议您将 Servlets 部署到 Web 服务器,甚至进行测试。要在本地运行 Servlets,请将 Servlets 添加到 exception 站点列表,该列表可从 Java 控制面板的“安全性”选项卡进行 管理。

在本主题中,我们将讨论 Servlets 的安全限制和功能。

Sandbox Applets

沙箱 Servlets 仅限于安全沙箱,并且可以执行以下操作:

  • 他们可以构建与主机和端口的网络连接。协议必须匹配,并且如果使用域名来加载 Servlets,则必须使用域名而不是 IP 地址来连接回主机。

  • 他们可以使用java.applet.AppletContext类的showDocument方法轻松显示 HTML 文档。

  • 他们可以在同一页面上调用其他 Servlets 的公共方法。

  • 从本地文件系统(从用户CLASSPATH的目录中)加载的 Applet 没有通过网络加载的 Applet 的任何限制。

  • 他们可以读取安全的系统属性。有关安全系统属性的列表,请参见System Properties

  • 通过使用 JNLP 启动时,沙箱 Servlets 还可以执行以下操作:

  • 他们可以在 Client 端上打开,读取和保存文件。

    • 他们可以访问共享的系统范围的剪贴板。

    • 他们可以访问打印功能。

    • 他们可以在 Client 端上存储数据,决定应如何下载和缓存 Servlets,等等。有关使用 JNLP API 开发 Servlets 的更多信息,请参见JNLP API

沙盒 Servlets不能执行以下操作:

  • 他们无法访问 Client 端资源,例如本地文件系统,可执行文件,系统剪贴板和打印机。

  • 他们无法连接到任何第三方服务器(源于它的服务器以外的任何服务器)或从中检索资源。

  • 他们无法加载本机库。

  • 他们无法更改 SecurityManager。

  • 他们无法创建 ClassLoader。

  • 他们无法读取某些系统属性。有关禁止的系统属性的列表,请参见System Properties

Privileged applets

特权 Servlets 没有对沙箱 Servlets 施加的安全限制,并且可以在安全沙箱外部运行。

Note:

JavaScript 代码被视为未签名的代码。当从 HTML 页面中的 JavaScript 代码访问特权 Servlets 时,该 Servlets 将在安全沙箱内*内执行。这意味着特权 Servlets 的行为本质上类似于沙盒 Servlets。

有关如何使用 Servlets 的信息,请参见富 Internet 应用程序中的安全性

Additional Information

有关 applet 安全性对话框的更多信息,请参见探索安全警告功能(oracle.com/technetwork 上的文章)