Sup*_*999 54 java netbeans derby
我下载了Netbeans 7.4和Java 7 Update 51.当我尝试从Netbeans启动Java DB或derby连接时,我收到以下错误.这是在Windows 8 PC上.我在工作时下载了windows xp 32 bit的版本.它工作正常.我不确定缺少什么.
Thu Jan 16 00:48:23 EST 2014 : Security manager installed using the Basic server security policy.
Thu Jan 16 00:48:24 EST 2014 : access denied ("java.net.SocketPermission" "localhost:1527" "listen,resolve")
java.security.AccessControlException: access denied ("java.net.SocketPermission" "localhost:1527" "listen,resolve")
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:372)
at java.security.AccessController.checkPermission(AccessController.java:559)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
at java.lang.SecurityManager.checkListen(SecurityManager.java:1134)
at java.net.ServerSocket.bind(ServerSocket.java:375)
at java.net.ServerSocket.<init>(ServerSocket.java:237)
at javax.net.DefaultServerSocketFactory.createServerSocket(ServerSocketFactory.java:231)
at org.apache.derby.impl.drda.NetworkServerControlImpl.createServerSocket(Unknown Source)
at org.apache.derby.impl.drda.NetworkServerControlImpl.access$000(Unknown Source)
at org.apache.derby.impl.drda.NetworkServerControlImpl$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.derby.impl.drda.NetworkServerControlImpl.blockingStart(Unknown Source)
at org.apache.derby.impl.drda.NetworkServerControlImpl.executeWork(Unknown Source)
at org.apache.derby.drda.NetworkServerControl.main(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
小智 107
这就是我做的:
通过从NetBeans 7.4执行此指令,确切了解java主目录的位置:
System.out.println(System.getProperty("java.home"));
这是我案例的输出:
C:\Program Files\Java\jdk1.7.0_51\jre
这对我来说非常重要,我正在修改另一个java.policy
并没有任何效果,浪费了我几个小时.
由于java.policy
是unix样式文件和只读,我用notepad ++打开并编辑它并以管理员身份执行(在同一个java主目录下):
C:\Program Files\Java\jdk1.7.0_51\jre\lib\security\java.policy
在第一次授予后,仅将这些行添加到文件中:
grant { permission java.net.SocketPermission "localhost:1527", "listen"; };
祝好运.
Pat*_*k W 31
更改默认套接字权限
分发给所有代码(包括不受信任的代码)的默认套接字权限已在此版本中更改.以前,所有代码都能够将任何套接字类型绑定到大于或等于1024的任何端口号.仍然可以将套接字绑定到每个系统上的临时端口范围.短暂端口的确切范围因操作系统而异,但通常在高范围内(例如从49152到65535).新的限制是,临时范围之外的绑定套接字现在需要系统安全策略中的显式权限.
大多数使用客户端tcp套接字和安全管理器的应用程序都不会遇到任何问题,因为它们通常会绑定到临时端口.使用数据报套接字或服务器tcp套接字(以及安全管理器)的应用程序可能会遇到之前未见过的安全异常.如果发生这种情况,用户应检查是否需要请求的端口号,如果是这种情况,可以将套接字权限授予添加到本地安全策略,以解决此问题.
这意味着您必须明确设置应用程序的权限才能访问1025和49151之间的端口范围.因此,您可以通过在授予的权限列表中附加此行来授予此权限:
访问您的Java主目录并访问您的策略文件$JAVA_HOME/jre/lib/security/java.policy
并进行以下更改.
grant{
//List of granted permissions
permission java.net.SocketPermission "localhost:1527", "listen";
}
Run Code Online (Sandbox Code Playgroud)
Chu*_*Lee 15
有关"问题"的说明,请参阅http://www.oracle.com/technetwork/java/javase/7u51-relnotes-2085002.html.搜索other-libs/javadb
根据您的要求,我所做的是去修改默认安全策略
cd $JAVA_HOME/jre/lib/security
Run Code Online (Sandbox Code Playgroud)
编辑java.policy
(先备份!)
添加以下内容
grant codeBase "file:${java.home}}/../db/lib/*" {
permission java.security.AllPermission;
};
Run Code Online (Sandbox Code Playgroud)
请注意,这是我的要求.
我正在授予每个使用u51 JRE的应用程序启动Derby的权限.
编辑
另一种方法是使用一组不太宽松的权限,例如:
grant codeBase "file:${java.home}}/../db/lib/*" {
permission java.net.SocketPermission "localhost:1527", "listen,resolve";
};
Run Code Online (Sandbox Code Playgroud)
默认情况下,NetBeans使用随GlassFish一起安装的derby版本.所以我的权限在Mac上看起来像这样.它在Windows上类似,但路径需要更改.
grant codeBase "file:/Applications/NetBeans/glassfish-4.0/javadb/lib/*" {
permission java.net.SocketPermission "localhost:1527", "listen,resolve";
};
Run Code Online (Sandbox Code Playgroud)
小智 5
由于上层措施不起作用,我将以下权限添加到主权限部分的末尾:
permission java.net.SocketPermission "localhost:1527", "listen,resolve";
Run Code Online (Sandbox Code Playgroud)
您还可以通过.java.policy
在主目录中调用的文件中授予所需权限来基于每个用户解决问题.
适用于Unix和Windows系统,如下所示:http://docs.oracle.com/javase/7/docs/technotes/guides/security/PolicyFiles.html
如果系统范围的策略文件被覆盖(例如更新JDK时),或者您没有编辑系统文件的权限,这可能很有用.
这就是我的意思$HOME/.java.policy
:
grant {
permission java.net.SocketPermission "localhost:1527", "listen";
};
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
73074 次 |
最近记录: |