2011-09-02 31 views
1

我在我的java程序使用第三方库(JAR)和我得到这个错误:Java小程序的AccessControlException

java.security.AccessControlException: access denied ("java.util.PropertyPermission" "*" "read,write") 
    at java.security.AccessControlContext.checkPermission(Unknown Source) 
    at java.security.AccessController.checkPermission(Unknown Source) 
    at java.lang.SecurityManager.checkPermission(Unknown Source) 
    at java.lang.SecurityManager.checkPropertiesAccess(Unknown Source) 
    at java.lang.System.getProperties(Unknown Source) 
    at sfs2x.client.core.sockets.TCPSocketLayer.initNetty(TCPSocketLayer.java:63) 
    at sfs2x.client.core.sockets.TCPSocketLayer.<init>(TCPSocketLayer.java:59) 
    at sfs2x.client.bitswarm.BitSwarmClient.init(BitSwarmClient.java:90) 
    at sfs2x.client.SmartFox.initialize(SmartFox.java:148) 
    at sfs2x.client.SmartFox.<init>(SmartFox.java:127) 
    at bfwd.RedemptionOnline.Client.RedemptionOnlineApplet.init(RedemptionOnlineApplet.java:29) 
    at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter.init(Unknown Source) 
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 

我我的开发服务器上测试这一点,试图连接到本地主机。为什么现在我会得到这个错误,我将来如何防止它呢?

好的,我甚至自我签名我的jar,但它仍然出现了这个错误。

回答

0
at sfs2x.client.core.sockets.TCPSocketLayer.initNetty(TCPSocketLayer.java:63) 

​​似乎是一个游戏服务器。 Netty是一个TCP/IP服务器。你为什么试图在客户端运行游戏服务器?我不确定您的网页访问者是否会对此感到满意。毕竟功能要求是什么?你有没有考虑让你的网络服务器完成这项工作?

无论如何,您需要sign该小程序才能使其正常工作。未签名的小程序具有非常严格的安全规则(否则,例如,将整个“我的文档”挖出并将其发送到服务器将非常容易)。基本上,您需要将您的代码发送给某个RSA签署公司,并让他们查看代码并获取您在applet中提供的一些RSA证书,以便客户端知道它是受信任的软件。

您也可以用自制证书签署您的小程序,该证书只有6个月有效期。但是当您的applet要被加载时,最终用户仍然会收到安全警告;如果这是真正可信的软件并且可能被执行,则要求最终用户确认。您仍然需要将小程序主init()包装在AccessController#doPrivileged()内。

public void init() { 
    AccessController.doPrivileged(new PrivilegedAction<Void>() { 
     @Override public Void run() { 
      // Put your original init() here. 
     } 
    }); 
} 
+0

我正在使用网络服务器。这是客户端API,它使用套接字连接到它。我试图创建一个“翻译”,如果你将之间的JavaScript <-> java <-> smartfoxserver。我想利用我的HTML5,CSS3和JavaScript技能来设计一个好的用户界面。 Java applet将处理连接到游戏服务器并向UI提供要显示的数据。我会尝试付钱的事业,我付不起公司去签署。特别是因为我只是想开发的东西第一 – LordZardeck

+0

好吧,这不起作用,因为它不会让我引用我的原始类中的变量。 – LordZardeck

+0

为什么不呢?只需构建您的UI主类并运行它。例如。 '新的UI()。run()'或者其他东西。这些变量显然应该在“UI”类中。 – BalusC