我碰到这个问题,运行时出现:
com.ms.security.SecurityExceptionEx[DBConnection.getSQLConnection]: cannot access "localhost"
这个是不能连接数据库com.ms.security.SecurityExceptionEx[CtrPanel.actionPerformed]: cannot access file c:/test/1.txt
这个是不能写入本地文件。
都是安全性问题。在网上找下资料,地址是 http://support.microsoft.com/kb/175622/zh-cn,下面是这网页上说明的原因。
. 如果您的小程序尝试执行受信任的操作,并且不受信任,将发生一个 SecurityExceptionEx[methodname.classname]。
  如果,则会发生 SecurityExceptionEx [主机]:
在 Web 浏览器调用执行受信任的操作的方法和该方法不首先 Assert 执行受信任的操作的权限。 如果您的小程序没有第一个断言其权限的小程序的默认构造函数、 Init()、 start()、 stop(),或 destroy() 方法中执行受信任的操作,则会发生这种情况。
在 Web 浏览器尝试调用从存档文件结合 cabbase 的存档文件或 cabinets 参数不位于相对到基本代码 URL。 如果小程序正在运行从一个基本代码位置,而存档文件位于不同于在基本代码的其他位置,则会发生此情况这种情况。
如果脚本引擎调用执行一个受信任的操作的方法,和方法不首先断言的权限执行受信任的操作,将发生一个 SecurityExceptionEx [未知]。 如果您的小程序具有由 VBScript 或 JScript,调用的公共方法,并且没有第一个断言其权限的方法执行受信任的操作,则会发生这种情况。
A"Java.Lang.SecurityException: J/Direct 方法已未被授权为不受信任的调用方的代表使用"如果 Web 浏览器或脚本引擎调用进行一个 J/Direct 调用的方法,该方法是否不首先断言其权限执行受信任的操作会发生。有没人遇到这难题,该怎么解决啊?高手请帮忙,非常感谢!

解决方案 »

  1.   

    沒遇到過
    JDK文檔里面提到這個問題
    但是里面沒有講怎么解決
      

  2.   

    有没有这个包,import com.ms.security.*;
    有个话,大侠给个地址
      

  3.   

    以下转载:
     原因:  如果您的小程序尝试执行受信任的操作,并且不受信任,将发生一个 SecurityExceptionEx[methodname.classname]。
    如果,则会发生 SecurityExceptionEx [主机]:
    在 Web 浏览器调用执行受信任的操作的方法和该方法不首先 Assert 执行受信任的操作的权限。 如果您的小程序没有第一个断言其权限的小程序的默认构造函数、 Init()、 start()、 stop(),或 destroy() 方法中执行受信任的操作,则会发生这种情况。
    在 Web 浏览器尝试调用从存档文件结合 cabbase 的存档文件或 cabinets 参数不位于相对到基本代码 URL。 如果小程序正在运行从一个基本代码位置,而存档文件位于不同于在基本代码的其他位置,则会发生此情况这种情况。
    如果脚本引擎调用执行一个受信任的操作的方法,和方法不首先断言的权限执行受信任的操作,将发生一个 SecurityExceptionEx [未知]。 如果您的小程序具有由 VBScript 或 JScript,调用的公共方法,并且没有第一个断言其权限的方法执行受信任的操作,则会发生这种情况。
    A"Java.Lang.SecurityException: J/Direct 方法已未被授权为不受信任的调用方的代表使用"如果 Web 浏览器或脚本引擎调用进行一个 J/Direct 调用的方法,该方法是否不首先断言其权限执行受信任的操作会发生。
    回到顶端
      

  4.   

    解决方案:
    如果一个 SecurityExceptionEx[methodname.classname] 出现您必须签名您的小程序,使其能够执行 Java 沙箱之外的操作。 有关详细信息,请参阅 Microsoft SDK for Java 如本文的在"参考"一节所述中文档。 ( 注意 : 您必须低签名具有适当权限的在 CAB 文件或-LowX 权限可确保您有适当的访问,或者您可能会登录具有适当的精细权限使用传递给 Signcode.exe ini 文件)。。 如果就会发生 SecurityExceptionEx [主机] 则您可以执行以下项之一中: 
    如果您确信您的调用方不损害如果您信任的操作执行,解决方法都相同为,SecurityExceptionEx [未知] 则 (请参阅该项目符号列表段落)。
    确保任何档案文件存档,结合 cabbase 中, 被引用或 CAB 压缩包参数标记位于相对于在基本代码的小程序。
    如果一个 SecurityExceptionEx [主机],SecurityExceptionEx [未知],或"Java.Lang.SecurityException: J/Direct 方法已未被授权为不受信任的调用方的代表使用",并且确保在调用方不会损害如果您信任的操作执行,您可以执行以下之一: 
    断言使用 PolicyEngine 类您使用的权限。 ( 注意 : PolicyEngine.assertPermission() 程序生存期与它要调用的方法的生存期相同。 一次断言其权限返回该方法将需要 re-assert 权限根据)。
    生成单独的线程授予执行该操作,线程权限的情况下执行受信任的操作。
      

  5.   

    由于目前的微软的JVM虚拟机(即使是到了今天2009年)还是基于当初Sun JDK1.1版本的(这是由于微软与Sun有‘深仇大恨’),而当初Sun公司刚开发出APPLET,由于它的功能太强大了,甚至可以通过浏览器操作远程客户端,所以Sun为Applet制定了“沙盒(SandBox)”的限制,即Applet不能访问本地文件,以此来保证你的本机的安全。你的数据库因为也是在本地的,所以是不能够访问的,因此才会出现“com.ms.security.SecurityExceptionEx[DBConnection.getSQLConnection]: cannot access "localhost",”。当然,这也是有解决方案的。下面的示例小程序演示如何从是受信任的操作 Web 页中读取字符。 本示例需要通过将该文件放在运行该项目从 Developer Studio 签名 CAB 文件中或通过将类放入在 classpath 为受信任: 
    import com.ms.security.*;import java.applet.Applet;
    import java.net.*;
    import java.io.*;
    import java.awt.*;public class myApplet1 extends Applet {
      TextField message=null;  public myApplet1() {
        message=new TextField();
        setLayout(new BorderLayout());
        add("Center",message);
      }  public void init()
    {
        /*
          Our init function needs to read a character from a URL, which is a
          trusted operation.  We assert NET permission to stop the stack
          crawling since the Web page isn't trusted.  The applet must be
          signed so the init() function has permission to perform net
         operations.
       */ 
        try {
          if (Class.forName("com.ms.security.PolicyEngine") != null) {
            PolicyEngine.assertPermission(PermissionID.NETIO);
          }
        } catch (Throwable cnfe) {
        }    try {
          URL url = new URL("http://www.microsoft.com/");
          DataInputStream dis;
          dis = new DataInputStream(url.openConnection().getInputStream());
          dis.readChar();
          message.setText("Read character.");
        } catch (MalformedURLException mue) {
          message.setText("MalformedURL");
          mue.printStackTrace();
        } catch (Throwable t) {
          message.setText(t.toString());
          t.printStackTrace();
        }
      }
    }当然无论你采用什么方式,都是非常繁琐的,因为你要导入VJ++的ActiveX组件。这主要的原因是MS JVM的编译环境是在MS VM(vj++)下,而非纯Sun JDK下。如果你是单纯的applet开发,那么在Sun jvm中,是可以成功运行的。但是你要做VRML,相比一定要用到vrml97.jar,或者是EAI(corteai.zip),那么只能在MS JVM中执行,否则会报错。因为这两个JAR/ZIP包是用MS 的编译环境打包的。所以,建议的最终解决方案。用APPLET与Servelt建立通信,将要保存的数据,传递至Servelt,然后由Servelt来对数据库进行读写。这是最理想的做法。至于applet与Servlet的通信方式,那就是采用URLConnection类