アプレットを実行すると
java.lang.ClassNotFoundExceptionがcom.ms.securityパッケージでスローされる
症状アプレットを Sun JRE を使用したブラウザで実行している場合、
ClassNotFoundExceptionがcom.ms.securityパッケージのClassLoaderでスローされます。同じアプレットが Microsoft VM では実行できます。原因
Microsoft VM では、アプレットやアプリケーションの実行時にセキュリティポリシーへアクセスするために、独自の
com.ms.securityパッケージを用意しています。このパッケージは Sun JRE では利用できないため、アプレットを実行すると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 2 プラットフォームでは、
java.security.AccessControllerがパーミッションのアサーションに関して同様の機能を持ちます。以下に、移行後のソースコードを示します。
public class AssertPermissionApplet extends java.applet.Applet
{
public void init()
{
try
{
// Assert permission on network I/O
java.net.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
}セキュリティについての詳細は、J2SE の API ドキュメントを参照してください。
詳細情報
「Security」を参照してください。