java.security.AccessControlException:访问被拒绝(java.net.SocketPermission 127.0.0.1:8081 connect,resolve) - 主要原因

时间:2014-08-01 07:01:17

标签: java security applet

导致异常报告的主要原因是什么?

相同的可信签名小程序(Digicert证书),在某些PC上运行良好,不在其他PC上运行。当我尝试通过URLConnection

获取附件流时发生异常

如果它不起作用,我决定

grant { 
    permission java.security.AllPermission; 
};

{/ 2}}但我想避免更新每台电脑。

可能是port(8081)问题吗?我应该调查什么?

4 个答案:

答案 0 :(得分:1)

  

相同的可信签名小程序(Digicert证书),在某些PC上运行良好,不在其他PC上运行。

它不受其他PC的信任,并且在被问及时被用户接受为不可信任。

OR

  

这是我的manifest.mf

Trusted-Library: true
Application-Name: MyApp
Name: MyName
Permissions: all-permissions
Created-By: 1.6.0_16 (Sun Microsystems Inc.)
Caller-Allowable-Codebase: *
Main-Class: MyClass
Codebase: *

如果这是完整的清单,则此JAR根本没有签名,更不用说是受信任的证书了。它应该包含Name:SHA-256-Digest个条目。

答案 1 :(得分:0)

为您的applet编写自定义SecurityManager可以解决您的问题。设置自己的SecurityManager将授予您的小程序的所有权限。

class customSecurityManager extends SecurityManager {

        SecurityManager original;

        customSecurityManager(SecurityManager original) {
            this.original = original;
        }

        /**
         * Deny permission to exit the VM.
         */
        public void checkExit(int status) {
            //throw(new SecurityException("Not allowed"));
        }

        /**
         * Allow this security manager to be replaced, if fact, allow pretty
         * much everything.
         */
        public void checkPermission(Permission perm) {
        }

        public SecurityManager getOriginalSecurityManager() {
            return original;
        }
    }

现在为您的applet设置此安全管理器

public void init() {
   customSecurityManager cSM = new customSecurityManager(System.getSecurityManager());
   System.setSecurityManager(cSM);
}

警告Impact of System.setSecurityManager(null)

答案 2 :(得分:0)

您必须添加"所有权限"在manifest.mf实例" sandbox"

使用代码签名证书签署您的jar文件。

答案 3 :(得分:0)

转到Java jdk和./jre/lib/security/的路径 打开Java策略文件

然后为SocketPermission设置授予权限 grant{ permission java.net.SocketPermission "localhost:8080", "connect,resolve"; }  然后重新启动并运行您的代码。