我想将单个安全策略文件发送给我们的客户-适用于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
Windows上需要在“文件:”之后的第一个“ /”,因为变量our.home被定义为“ C:\ foo”。我在策略文件本身中有同样的问题:
grant codeBase "file:/${our.home}/-" // Windows
grant codeBase "file:${our.home}/-" // Linux
我特别在寻找一种聪明的方式来以独立于平台的方式指定codeBase。顺便说一句,实际上,重新定义our.home并不是一个选择,因为FilePermission子句中需要它。
最佳答案
如果是我,我会接受这样的事实,即我需要其他文件,并通过使用脚本来删除“ /”来从Windows版本生成Linux版本。
但是,如果您确实需要使用相同的文件,则可以通过仅定义另一个环境变量来表示Windows上的“ /”,而在Linux上将其留空,从而将痛苦换成另一种。
# our.hack = "/" on windows
# our.hack = "" on linux
policy.url.3=file:${our.hack}${our.home}/lib/OurSecurity.policy
在生产环境中,也许our.hack不是最好的名字,但是您会明白的。该变量不用于其他任何用途,因此不应干扰应用程序的其余部分。