我最近在通过JNLP启动我的应用程序时偶然发现了一个问题 . 我现在把它缩小到 java.security.AccessControlException
,这使我无法关闭我的 ExecuterService
.
所以,我做了一些阅读,发现我需要权限( modifyThread
)才能成功关闭服务 . 我还发现我应该使用 <security>
-tag(在JNLP文件中)来请求它,但我对如何使用有点困惑 .
[...]如果指定了all-permissions元素,则应用程序将具有对客户端计算机和本地网络的完全访问权限 . 如果应用程序请求完全访问权限,则必须对所有JAR文件进行签名 . 将提示用户[...]
从阅读本文来看,在我看来,我可以选择获得全部或无权限......这似乎是一个令人困惑的实现 . 因为我只需要一个关闭我的服务 .
我也读了this article,告诉我不应该请求所有权限,因为我会打开用户计算机以获取恶意代码 .
那么,有没有办法指定我只需要特定的权限( modifyThread
),因此我不需要签署我的jar?或者我必须使用"sign my jar and request everything" -approach?
1 回答
是 . JWS权限有3个级别1,唯一允许修改线程的级别是
all-permissions
.1)JWS安全级别
沙盒装 . 提供非常有限的环境 . 只允许使用JNLP API服务访问打印机和本地文件系统之类的东西,这些服务在提示用户后提供更多有限形式的
File
. 来自窗口 Banner . 只能与自己的服务器通信 .j2ee-application-client-permissions
- 自动提供这些JNLP API服务(在用户接受数字签名代码之后)删除窗口 Banner .all-permissions - 几乎所有东西,包括替换现有的安全管理器(是的,甚至'all permissions'代码在JWS中获得安全管理器 - 它只是非常宽松) .
还要追踪JNLP和JWS页面中的链接 . 我个人可以推荐这些摘要和链接 .