com.ms.security
パッケージでClassLoader
によってjava.lang.ClassNotFoundException
がスローされる
症状Sun JavaTM Runtime Environment (JRETM) を使ってブラウザ内でアプレットを実行すると、
com.ms.security
パッケージでClassLoader
によってjava.lang.ClassNotFoundException
がスローされます。同じアプレットが、Microsoft Virtual Machine (VM) の下では何のエラーもなく実行されます。原因
Microsoft VM では、アプレットやアプリケーションの実行時にセキュリティーポリシーへアクセスするために、独自の
com.ms.security
パッケージを用意しています。このパッケージは Sun JRE では使用できないため、このアプレットをブラウザ内で実行するとjava.lang.ClassNotFoundException
がスローされます。解決方法
類似のクラスを使用することで、アプレットのソースを
com.ms.security
パッケージからjava.security
パッケージに移行します。
たとえば次のアプレットではcom.ms.security.PolicyEngine
を使用して、URL への接続前にネットワーク I/O アクセス権を表明します。
public class AssertPermissionApplet extends java.applet.Applet
{
public void init()
{
try
{
// Assert permission on network I/O
com.ms.security.PolicyEngine.assertPermission
(com.ms.security.PermissionID.NETIO);
java.net.URL url = new java.net.URL("http://randomhost/randomfile");
.....
} catch (java.net.MalformedURLException mue) {
}
catch (java.io.IOException ioe) {
}
} // init
}Java テクノロジでは、
java.security.AccessController
がパーミッションのアサーションに関して同様の機能を持ちます。次のソースコードは移行後の機能を示したものです。
public class AssertPermissionApplet extends java.applet.Applet
{
public void init()
{
try
{
// Assert permission on network I/O
java.security.AccessController.checkPermission(new java.net.SocketPermission("randomhost:80", "connect,accept"));
java.net.URL url = new java.net.URL("http://randomhost/randomfile");
.....
} catch (java.net.MalformedURLException mue) {
}
catch (java.io.IOException ioe) {
}
} // init
}セキュリティーの詳細については、JavaTM SE テクノロジの API ドキュメントを参照してください。
詳細情報
Security クラスを参照してください。