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