2016-09-01 9 views
1

アプレットベースのアプリケーションをWeb Startアプリケーションに移行します。JavaFX Web StartアプリケーションのカスタムSecureClassLoaderとアクセス許可

異なるメディアからリソースとクラスをフェッチするために、カスタムClassLoaderが必要です。また、上にJavaFXレイヤーを使用しています。

すべての権限はWebStartアプリケーションに付与され、マニフェストは完了し、jarは有効な証明書で署名されます。実際に、メディアからクラスを取得せずにデフォルトのClassLoaderでロードすると、すべてが機能します。

によって引き起こさ

:java.security.AccessControlException:私は、カスタムクラスローダを使用している場合でも、我々は次のような問題に直面してアクセスが接続」「java.net.SocketPermission」「www.mydomain.com:443」( を否定しました、resolve ")

カスタムのSecureClassLoaderは、すべての権限を許可しています。それは助けにはならない。

私もセキュリティマネージャを交換しようとしているが、私はできません:

java.lang.SecurityException:JVMの共有、でも私ならば、セキュリティ マネージャー

を設定することはできません

PARAM名= "separate_jvm" 値= "true" を

:JNLP内のアプレット記述子にパラメータを追加

私はマネージャーを交換できません。

誰でもこれらのクラスにアクセス許可を与えることができますか?クライアント側でポリシーファイルを変更することはできません。

java.security.AccessControlException: access denied ("java.net.SocketPermission" "www.mydomian.com" "resolve") 
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.checkConnect(Unknown Source) 
at sun.plugin2.applet.SecurityManagerHelper.checkConnectHelper(Unknown Source) 
at sun.plugin2.applet.FXAppletSecurityManager.checkConnect(Unknown Source) 
at java.net.InetAddress.getAllByName0(Unknown Source) 
at java.net.InetAddress.getAllByName(Unknown Source) 
at java.net.InetAddress.getAllByName(Unknown Source) 
at java.net.InetAddress.getByName(Unknown Source) 
at com.sun.deploy.net.CrossDomainXML.addAccess(Unknown Source) 
at com.sun.deploy.net.CrossDomainXML.allowNoAccess(Unknown Source) 
at com.sun.deploy.net.CrossDomainXML.check(Unknown Source) 
at sun.plugin2.applet.SecurityManagerHelper.checkConnectHelper(Unknown Source) 
at sun.plugin2.applet.FXAppletSecurityManager.checkConnect(Unknown Source) 
at java.net.InetAddress.getAllByName0(Unknown Source) 
at java.net.InetAddress.getAllByName(Unknown Source) 
at java.net.InetAddress.getAllByName(Unknown Source) 
at java.net.InetAddress.getByName(Unknown Source) 
at java.net.URLStreamHandler.getHostAddress(Unknown Source) 
at java.net.URLStreamHandler.hashCode(Unknown Source) 
at java.net.URL.hashCode(Unknown Source) 
at java.util.HashMap.hash(Unknown Source) 
at java.util.HashMap.get(Unknown Source) 
at com.sun.deploy.security.CPCallbackHandler.getDefaultCodeSource(Unknown Source) 
at com.sun.deploy.security.CPCallbackHandler.access$1400(Unknown Source) 
at com.sun.deploy.security.CPCallbackHandler$ChildElement.<init>(Unknown Source) 
at com.sun.deploy.security.CPCallbackHandler$ChildCallback.openClassPathElement(Unknown Source) 
at com.sun.deploy.security.CPCallbackHandler$ChildCallback.openClassPathElement(Unknown Source) 
at sun.plugin2.applet.Plugin2ClassLoader.getCodebaseLookup(Unknown Source) 
at sun.plugin2.applet.Plugin2ClassLoader.getResourceAsResource(Unknown Source) 
at com.sun.deploy.security.DeployURLClassLoader.getResourceAsStream(Unknown Source) 
at java.lang.Class.getResourceAsStream(Unknown Source) 
at mypackage.Util.readResource(Util.java:42) 
at mypackage.CustomClassLoader.encryptedLookup(CustomClassLoader.java:101) 
at mypackage.ClassLoader.findClass(CustomClassLoader.java:78) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at customUtil.ParametersGetter.getRole(ParametersGetter.java:80) 
at com.application.ModuleConfig.main(ModConfig.java:448) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at mypackage.CustomClassLoader.launch(CustomClassLoader.java:126) 
at mypackage.Browser$1.call(Browser.java:54) 
at mypackage.Browser$1.call(Browser.java:45) 
at javafx.concurrent.Task$TaskCallable.call(Task.java:1423) 
at java.util.concurrent.FutureTask.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 

ありがとう:呼び出しがどこから来ている

は、ここで私はポイントにスタックトレースを追加します。

答えて

0

最後に問題が検出されました。

システムクラスローダーは、クラスローダークラスをロードしたクラスローダーを使用するのではなく、カスタムクラスローダーの親クラスローダーとして設定されていました。

その結果、他のクラスローダーは、フローで失われたアプリケーションのライブラリによってカスケードされ、権限解決で競合が発生しました。

関連する問題