アプレットを実行すると java.lang.ClassNotFoundExceptioncom.ms.security パッケージでスローされる


症状

アプレットを Sun JRE を使用したブラウザで実行している場合、ClassNotFoundExceptioncom.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」を参照してください。