[英]AccessControlException: access denied - caller function failed to load properties file
我有一個jar存檔環境,它將在這樣的文件夾中調用我的課程:
java -jar "emarket.jar" ../tournament 100
我的編譯類已部署到../tournament文件夾中,此命令運行良好。
在更改代碼以加載屬性文件后,它會收到以下異常消息:
Exception in thread "main" java.security.AccessControlException: access denied (java.io.FilePermission agent.properties read)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkRead(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at Agent10479475.getPropertiesFromConfigFile(Agent10479475.java:110)
at Agent10479475.<init>(Agent10479475.java:100)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at emarket.client.EmarketSandbox.instantiateClientObjects(EmarketSandbox.java:92)
at emarket.client.EmarketSandbox.<init>(EmarketSandbox.java:27)
at emarket.client.EmarketSandbox.main(EmarketSandbox.java:166)
我想知道為什么此安全檢查將失敗。 我在類的默認構造函數中發出getPropertitiesFromConfigFile()函數,如下所示:
public class Agent10479475 extends AbstractClientAgent
{
//default constructor
public Agent10479475()
{
//set all properties to their default values in constructor
FT_THRESHOLD = 400;
FT_THRESHOLD_MARGIN = 50;
printOut("Now loading properties from a config file...", "");
getPropertiesFromConfigFile();
printOut("Finished loading","");
}
private void getPropertiesFromConfigFile()
{
Properties props = new Properties();
try
{
props.load(new FileInputStream("agent.properties"));
FT_THRESHOLD = Long.parseLong(props.getProperty("FT_THRESHOLD"));
FT_THRESHOLD_MARGIN = Long.parseLong(props.getProperty("FT_THRESHOLD_MARGIN "));
}
catch(java.io.FileNotFoundException fnfex)
{
printOut("CANNOT FIND PROPERTIES FILE :", fnfex);
}
catch(java.io.IOException ioex)
{
printOut("IOEXCEPTION OCCURED :", ioex);
}
}
}
我的班級正在同一文件夾下加載其自己的.properties文件。 為什么Java環境會抱怨這樣的拒絕訪問? 我是否必須配置不是由我編寫並存儲在emarket.jar中的emarket.client.EmarketSandbox類訪問我的agent.properties文件?
任何提示或建議,不勝感激。 提前謝謝了。
訪問
系統屬性
文件需要權限,並且您的代碼顯然在未授予權限的沙箱中運行。 你要么需要
修改沙盒安全規則以允許訪問該文件,
添加可以調用以傳遞“ agent.properties”文件內容的特定API,或者
尋找一些其他方法來獲取代碼的屬性,而這些方法根本不需要讀取文件。
最后一個示例可能會將文件中的屬性作為命令行參數傳遞,或將文件放入JAR文件中,以便您可以將其作為資源讀取(對安全沙箱進行模化也不會阻止該文件)。
但是必須說,關於JAR文件有些奇怪,不能讓您在自己的計算機上讀取文件。 為什么這樣做呢? 這是關於安全管理器,權限等的家庭作業嗎?
您可以將文件“ agent.properties”放入jar中,並通過getResourceAsStream訪問它。 由於我不了解您的沙箱中的安全策略的詳細信息,因此無論該權限是否有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.