【问题标题】:java.security.AccessControlException: access denied ("java.net.SocketPermission" "localhost:1527" "listen,resolve")java.security.AccessControlException: 访问被拒绝 ("java.net.SocketPermission" "localhost:1527" "listen,resolve")
【发布时间】:2016-09-19 07:17:39
【问题描述】:

我不得不再次面对这个错误。

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 文件的地方吗? 还有其他可能的原因吗?

【问题讨论】:

    标签: java database security glassfish


    【解决方案1】:

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

    然后转到该 JDK/JRE 的 \jre\lib\security 文件夹并添加以下内容:

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

    【讨论】:

    • 我尝试使用在 ~/glassfish4/glassifish/javadb/ 中找到的文件。这是正确的吗?运行 sysinfo.bat (它不仅适用于 windows 机器吗?我有一台 linux 机器)我得到错误。运行 sysinf 我得到错误:无法找到或加载主类 org.apache.derby.tools.sysinfo。运行“echo $JAVA_HOME”我什么也没得到:-(
    • 授予安装 JRE 运行的所有代码的权限可能不是一个好主意。
    • 是的。但是由于它是在给定端口上的侦听 - 默认的 derby 端口 - 如果您的机器位于防火墙后面,它不会太危险。但我确实接受你的观点。
    【解决方案2】:

    来自https://docs.oracle.com/cd/E18930_01/html/821-2418/beabx.html:

    每个 GlassFish Server 域都有自己的全局 J2SE 策略文件,位于 domain-dir/config。该文件名为 server.policy。

    【讨论】:

    • 感谢您的指出。我不知道。但是我的问题自动解决了,只需重新启动服务器。很难说是什么原因
    猜你喜欢
    • 2015-02-23
    • 1970-01-01
    • 2015-06-30
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 2014-09-24
    相关资源
    最近更新 更多