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 クラスを参照してください。