我最近在通过JNLP启动我的应用程序时偶然发现了一个问题.我现在把它缩小到java.security.AccessControlException,它拒绝我关闭我的ExecuterService.
所以,我做了一些阅读,发现我需要权限(modifyThread)才能成功关闭服务.我还发现我应该使用< security> -tag(在JNLP文件中)来请求它,但我对如何使用感到困惑.
[…] If the
all-permissions
element is specified,the application
will have full access to the client machine and local network. If an
application requests full access,then all JAR files must be
signed. The user will be prompted […]
从阅读本文来看,在我看来,我可以选择获得全部或无权限……这似乎是一个令人困惑的实现.因为我只需要一个关闭我的服务.
我还阅读了this article,告诉我不应该请求所有权限,因为我会打开用户计算机以获取恶意代码.
那么,有没有办法指定我只需要特定的权限(modifyThread),因此我不需要签署我的jar?或者我是否必须使用“签署我的罐子并请求一切” – 接近?
..will I have to go with the “sign my jar and request everything”-approach?
是. JWS权限有3个级别1,唯一允许修改线程的权限是all-permissions.
1)JWS安全级别
>沙盒装.提供非常有限的环境.只允许使用JNLP API服务访问打印机和本地文件系统之类的东西,这些服务在提示用户后提供更多有限形式的文件.来自窗口横幅.只能与自己的服务器通信.
> j2ee-application-client-permissions – 提供那些无提示的JNLP API服务(在用户接受数字签名代码之后)删除窗口横幅.
>所有权限 – 几乎任何东西,包括替换现有的安全管理器(是的,甚至’所有权限’代码在JWS中获得安全管理器 – 它只是非常宽松).