5

我最近在通过 JNLP 启动我的应用程序时偶然发现了一个问题。我现在将其缩小到 a java.security.AccessControlException,这拒绝我关闭我的ExecuterService.

所以,我做了一些阅读,发现我需要权限(modifyThread)才能成功关闭服务。我还发现我应该使用<security>-tag(在 JNLP 文件中)来请求它,但我对如何请求它有点困惑。

标签的文档说:

[...] 如果all-permissions指定了元素,应用程序将拥有对客户端机器和本地网络的完全访问权限。如果应用程序请求完全访问权限,则所有JAR 文件都必须签名。将提示用户[...]

通过阅读本文,在我看来,我可以选择获得所有权限或获得权限……这似乎是一个令人困惑的实现。因为我只需要一个来关闭我的服务。

我还阅读了这篇文章,告诉我不应该请求所有权限,因为这样我会打开用户计算机以获取恶意代码。

那么,有没有办法指定我只需要特定的权限(modifyThread),因此我不需要签署我的 jar?还是我必须采用“签署我的罐子并要求一切”的方法?

4

1 回答 1

4

..我是否必须采用“签署我的罐子并要求一切”的方法?

是的。JWS 权限分为 3 个级别1,唯一允许修改线程的级别是all-permissions.

1) JWS 安全级别

  • 沙盒。提供了一个非常有限的环境。仅允许使用 JNLP API 服务访问打印机和本地文件系统等内容,这些服务File在提示用户后提供了更有限的形式。附带橱窗横幅。只能与自己的服务器通信。
  • j2ee-application-client-permissions- 提供那些自发(在用户接受数字签名代码后)的 JNLP API 服务移除窗口横幅。
  • all-permissions- 几乎任何东西,包括替换现有的安全管理器(是的,即使是“所有权限”代码也可以在 JWS 中获得安全管理器 - 它非常宽松)。

还要追逐JNLPJWS页面中的链接。我个人可以推荐这些摘要和链接。

于 2012-06-06T17:24:42.827 回答