アプレットを実行すると
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」を参照してください。