我有一个使用256位AES加密的应用程序,开箱即用的Java不支持.我知道要使其正常运行我在安全文件夹中安装JCE无限强度jar.这对我作为开发人员来说很好,我可以安装它们.
我的问题是,由于此应用程序将被分发,最终用户很可能不会安装这些策略文件.让最终用户下载这些只是为了使应用程序功能不是一个有吸引力的解决方案.
有没有办法让我的应用程序运行而不覆盖最终用户机器上的文件?可以在没有安装策略文件的情况下处理它的第三方软件?或者从JAR中引用这些策略文件的方法?
如何以编程方式授予AllPermissions
给RMI应用程序,而无需使用策略文件?
更新:
经过一番研究,我编写了这个自定义策略类并通过它安装Policy.setPolicy(new MyPolicy())
.
现在我收到以下错误:
无效权限:(java.io.FilePermission\C:\ eclipse\plugins\org.eclipse.osgi_3.7.0.v20110613.jar read
class MyPolicy extends Policy {
@Override
public PermissionCollection getPermissions(CodeSource codesource) {
return (new AllPermission()).newPermissionCollection();
}
}
Run Code Online (Sandbox Code Playgroud) 在Java策略文件中,grant codeBase
语法指定应授予哪些代码库哪些权限.例如,
grant codeBase"file:/ C:/abc.jar"{permission java.security.AllPermission; };
授予AllPermission
abc.jar中的代码
以类似的方式,有没有办法deny
获得特定语法的权限?像这样:
deny codeBase"file:/ C:/def.jar"{permission java.io.FilePermission; };
以便内部代码def.jar
获取除FilePermission之外的所有其他权限?
这甚至可能吗?
我知道这可以使用SecurityManager
类轻松完成,但我只是想通过仅使用策略文件来了解是否可行.
我正在尝试运行Adobe的示例python策略服务器脚本,链接到这里:http://www.adobe.com/devnet/flashplayer/articles/socket_policy_files.html
我收到以下错误:
# python flashpolicyd.py --file=policy.xml
File "flashpolicyd.py", line 40
with file(path, 'rb') as f:
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
在上下文中:
class policy_server(object):
def __init__(self, port, path):
self.port = port
self.path = path
self.policy = self.read_policy(path)
self.log('Listening on port %d\n' % port)
try:
self.sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
except AttributeError:
# AttributeError catches Python built without IPv6
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error:
# socket.error catches OS with IPv6 disabled
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.sock.bind(('', port)) …
Run Code Online (Sandbox Code Playgroud)