2013-10-22 134 views
1

我試圖創建一個webstart應用程序。 它現在運行,但沒有閱讀我所有的設置。Java webstart權限問題

當我啓動jnlp文件並嘗試使用InputStream讀取另一個Jars資源時,會發生此問題。

我已經驗證了我的罐子,它們都使用相同的密鑰庫。

我有一個名爲Browser的jar試圖讀取另一個名爲Bone的jar。

這是我讀裏面我班BoneModule的設置:

InputStream settingsStream = IOUtil.getInputStream("bone.settings"); 
      InputStream defaultSettintgsStream = IOUtil 
        .getResourceAsStream("/com/mee/bone/bone.settings", BoneModule.class); 
      SimpleProperties storage = new SimpleProperties(settingsStream, 
        new SimpleProperties(defaultSettintgsStream, null).getProperties()); 
      storage.setStoreFilename("bone.settings"); 
      boneSettings.addStorage(storage); 

我已經把我的JNLP文件到這一點:

<?xml version="1.0" encoding="utf-8"?> 
<jnlp spec="1.0+" codebase="http://ip-adress/lib" href="launch.jnlp"> 
<information> 
    <title>Bildlabbet</title> 
    <vendor>mee</vendor> 
    <offline-allowed/> 
</information> 
<security> 
<all-permissions/> 
</security> 
<resources> 
    <j2se version="1.7+" initial-heap-size="32m" max-heap-size="128m" /> 
    <property name="jnlp.versionEnabled" value="false"/> 
    $dependencies 
</resources> 
<application-desc 
     name="Bildlabbet" 
     main-class="com.mee.browser.BildlabbetBrowser" 
     width="300"height="300"> 
</application-desc> 
</jnlp> 

我的堆棧跟蹤:

java.lang.reflect.InvocationTargetException 
    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 com.mee.browser.Browser.initModuleModel(Browser.java:639) 
    at com.mee.browser.Browser.<init>(Browser.java:438) 
    at com.mee.browser.BildlabbetBrowser$1.run(BildlabbetBrowser.java:92) 
    at java.awt.event.InvocationEvent.dispatch(Unknown Source) 
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
    at java.awt.EventQueue.access$200(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 
Caused by: java.security.AccessControlException: access denied ("java.io.FilePermission" "bone.settings" "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.File.exists(Unknown Source) 
    at com.mee.io.IOUtil.getInputStream(IOUtil.java:143) 
    at com.mee.io.IOUtil.getInputStream(IOUtil.java:123) 
    at com.mee.bone.BoneModule.getBoneSettings(BoneModule.java:91) 
    at com.mee.bone.BoneModule.<init>(BoneModule.java:68) 
    ... 21 more 

正如你在這裏看到的,我無法讀取其他jar中的設置文件。我的客戶端和瀏覽器 我的策略設置爲:

grant codebase "file:${jars}" { 
    permission java.security.AllPermission; 
}; 

grant codebase "file:/var/www/lib/*" { 
permisson java.security.AllPermisson; 
}; 

grant codebase"file:/http://ip-adress/lib/*" { 
permisson java.security.AllPermission; 
}; 

grant codebase "file:/home/ubuntu/bildlabbet/lib/*"{ 
permission java.security.AllPermission; 

grant { 
permission java.util.PropertyPermission "*", "read, write"; 
}; 

grant { 
permission java.security.AllPermission; 
}; 

它甚至有可能讀這樣嗎?因爲它現在正在閱讀我的jar在本地驅動器,因爲它是webstart所做的。

要提及的是即時通訊從臨時目錄中讀取jar。我已經嘗試調試臨時文件夾的文件權限。

這是固定的,如果我從服務器,而不是本地讀取罐子資源?

任何建議會很好!

謝謝!

回答

0

試試這個:

grant { permission java.io.FilePermission "/dir/yourfile", "read, write" }