gpt4 book ai didi

java - 将 java.security.policy 属性设置为跨平台文件路径

转载 作者:行者123 更新时间:2023-12-01 15:13:33 25 4
gpt4 key购买 nike

我正在尝试以编程方式设置系统属性“java.security.policy”。

只要安全策略文件的路径没有空格,它就可以工作。

File myFileReference = new File("C:\folder_name\security.policy")
System.setProperty("java.security.policy", myFileReference.getAbsolutePath());
System.setSecurityManager(new RMISecurityManager());

如果文件路径中有空格,它们会用 %20 转义,如下所示“C:\folder%20name\security.policy”。

上面的代码执行得很好,但是所有安全检查都失败了。我认为 setProperty 并没有真正找到该文件。

在 Windows 上,写入文件名时无需转义空格即可。

System.setProperty("java.security.policy", "C:\\some folder\\wideopen.policy");

所以,问题似乎是 %20 空间逃逸。我可以使用正则表达式替换它,但也许这会使其仅在 Windows 上工作,而在其他地方失败。另外,我不想像那样对文件路径进行硬编码。

我查看了 Java 文档中的 File 函数,该函数返回适用于任何平台的“System.setProperty”兼容路径名。我也尝试过类似 toURI().toString() 的方法,但没有成功。

有没有一种优雅的方法可以用 1 行代码从文件引用中获取工作文件路径字符串?

编辑:这是简化的代码,我像这样构建文件

URL policyURL = Class.class.getResource("/sub local folder/wideopen.policy");
new File(policyURL.getFile())

我需要一个相对路径,所以我使用了 getResource 这个小技巧,它恰好返回一个 URL,并带有令人讨厌的 %20 转义符。现在我知道问题是什么了,我可以使用 URLDecoder 来将它们去掉。但是有没有更不容易出错的方法呢?

最佳答案

我使用 URLDecoder 类解决了这个问题。这是我想要做的事情的完整示例,以及使其发挥作用的解决方案。

//here is the trick
URL policyFileURL = Class.class.getResource("/server/model/easy.policy");
String policyFilePath = "";
try {
policyFilePath = URLDecoder.decode(policyFileURL.getFile(), "UTF-8");
}
catch (UnsupportedEncodingException e) {}

//here what I wanted to do (now it works)
server.activate(port, new File(policyFilePath));

关于java - 将 java.security.policy 属性设置为跨平台文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11971597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com