第三方库中的Java applet AccessControlException

时间:2011-09-02 20:38:46

标签: java applet

我在我的java applet中使用了第三方库(jar),我收到了这个错误:

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)

我正在我的开发服务器上测试它并尝试连接到localhost。为什么我现在会收到此错误,以后如何阻止它呢?

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

1 个答案:

答案 0 :(得分:0)

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

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

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

您还可以使用自制证书对您的小程序进行签名,该证书仅有效期为6个月。但是当你的applet被加载时,最终用户仍会收到安全警告;如果这是真正受信任的软件并且可以执行,则要求最终用户确认。但是,您仍然需要将applet main init()包装在AccessController#doPrivileged()中。

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