日期:2014-05-20  浏览次数:20586 次

难题,运行 Java 小程序的 SecurityExceptionEx 异常,高手,请帮忙!非常感谢
我碰到这个问题,运行时出现:
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 调用的方法,该方法是否不首先断言其权限执行受信任的操作会发生。

有没人遇到这难题,该怎么解决啊?高手请帮忙,非常感谢!

------解决方案--------------------
沒遇到過
JDK文檔里面提到這個問題
但是里面沒有講怎么解決
------解决方案--------------------
以下转载:
 原因:

如果您的小程序尝试执行受信任的操作,并且不受信任,将发生一个 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 调用的方法,该方法是否不首先断言其权限执行受信任的操作会发生。
回到顶端
------解决方案--------------------
解决方案:
如果一个 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 权限根据)。
生成单独的线程授予执行该操作,线程权限的情况下执行受信任的操作。

------解决方案--------------------
状态:
 这种现象是设计使然。
------解决方案--------------------
由于目前的微软的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()