java.security.AccessControlException : access denied ("java.net.SocketPermission" "localhost:1527" "listen,resolve")

标签 java database security glassfish

我又不得不面对这个错误。

Fri Sep 16 17:17:29 CEST 2016 : 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:472)
    at java.security.AccessController.checkPermission(AccessController.java:884)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
    at java.lang.SecurityManager.checkListen(SecurityManager.java:1131)
    at java.net.ServerSocket.bind(ServerSocket.java:374)
    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)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.sun.enterprise.admin.cli.optional.DerbyControl.invokeNetworkServerControl(DerbyControl.java:158)
    at com.sun.enterprise.admin.cli.optional.DerbyControl.main(DerbyControl.java:245)
java.security.AccessControlException: access denied ("java.net.SocketPermission" "localhost:1527" "listen,resolve")
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
    at java.security.AccessController.checkPermission(AccessController.java:884)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
    at java.lang.SecurityManager.checkListen(SecurityManager.java:1131)
    at java.net.ServerSocket.bind(ServerSocket.java:374)
    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)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.sun.enterprise.admin.cli.optional.DerbyControl.invokeNetworkServerControl(DerbyControl.java:158)
    at com.sun.enterprise.admin.cli.optional.DerbyControl.main(DerbyControl.java:245)

这次我无法解决编辑 java.policy 文件的问题。

java -version 的结果:

openjdk version "1.8.0_91"
OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-3ubuntu1~16.04.1-b14)
OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode)

我在

中找到了 java.policy 文件
/etc/java-8-openjdk/security
/usr/java/jdk1.8.0_25/jre/lib/security

他们都在同一行:

permission java.net.SocketPermission "localhost:1527", "listen,resolve";

我的机器是Linux 16.04.01,服务器是Glassfish4

还有其他可能的地方可以编辑 java.policy 文件吗? 还有其他可能的原因吗?

最佳答案

首先,运行 derby 批处理文件 sysinfo.bat 以确定正在使用哪个 JDK/JRE 来运行它。如果您无法确定它,请转到计算机的环境变量并检查 JAVA_HOME 的值。

然后转到 JDK/JRE 的 \jre\lib\security 文件夹并添加:

grant {
    permission java.net.SocketPermission "localhost:1527", "listen";
};

关于java.security.AccessControlException : access denied ("java.net.SocketPermission" "localhost:1527" "listen,resolve"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39567405/

相关文章:

java - 绘制形状在graphics2D中不起作用

java - 使用 Java 从 Lotus Notes 文档获取 .txt 文件

java - 如何创建格式化文本以在 Java Swing 组件(JTextPane、JEditorPane...)中显示

php - 所有网站用户的前 3 名平均分

ruby-on-rails - Rake 中止...表 'users' 已存在

database - 限制 PouchDB 中的数据

javascript - 如何安全地记录用户统计信息

php - 在 URL 中公开类和方法名称是否不安全?

java - 创建新工件时出现错误 "MANIFEST.MF already exists in VFS"

php - 如何使用SSH导入mysql数据库中一张表中的大尺寸(10GB)数据?