如何在java.security和policy文件中指定平台无关的路径?

时间:2012-10-12 18:59:21

标签: java security

我想将单个安全策略文件发送给我们的客户 - 适用于Linux和Windows。在java.security文件中,我添加一行指向我们的文件,但由于路径差异,我必须为Windows和Linux指定不同的

policy.url.3=file:/${our.home}/lib/OurSecurity.policy  # Windows
policy.url.3=file:${our.home}/lib/OurSecurity.policy   # Linux

第一个" /"在"文件之后:"因为变量our.home被定义为" C:\ foo"所以在Windows上需要。我在策略文件中遇到了同样的问题:

grant codeBase "file:/${our.home}/-"   // Windows
grant codeBase "file:${our.home}/-"    // Linux

我特别希望找到一种以独立于平台的方式指定codeBase的聪明方法。顺便说一句,重新定义our.home并不是一个选项,因为它在FilePermission子句中是必需的。

2 个答案:

答案 0 :(得分:1)

如果是我,我会接受这样的事实:我需要不同的文件,并通过脚本删除“/".

从Windows版本生成Linux版本

但是,如果你真的需要使用同一个文件,你可以通过定义另一个环境变量来代表Windows上的“/”并在linux上将它显示为空白,从而将一种痛苦换成另一种。

# our.hack = "/" on windows
# our.hack = "" on linux
policy.url.3=file:${our.hack}${our.home}/lib/OurSecurity.policy

也许my.hack不是生产环境中最好的名字,但你明白了。该变量不用于任何其他内容,因此不应干扰应用程序的其余部分。

答案 1 :(得分:0)

为什么要使用相同的策略文件?
对于Linux和Windows,JRE是不同的,因此您应该遵循这一点并为每个安装保留不同的版本 IMO在这个案例中没有维护2个文件的问题 另外我建议你应该关注java更新可以删除你的策略文件这一事实。