有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Tomcat AccessControlException尽管使用了AllPermission

我试图将WAR部署到Tomcat,但Java安全管理器出现了问题。这是运行Java 1.8.0的Tomcat 7.0.55,Tomcat的启动参数如下:

-Dcatalina.base="/path/to/apache-tomcat-7.0.55"
-Dcatalina.home="/path/to/apache-tomcat-7.0.55"
-Djava.endorsed.dirs="/path/to/apache-tomcat-7.0.55\endorsed"
-Djava.security.manager
-Djava.security.policy="/path/to/config/custom_catalina.policy"

这里重要的一点是,它启用Java安全管理器,然后将其指向自定义安全策略,如下所示:

grant {
    permission java.security.AllPermission;
};

这似乎会导致一种毫无意义的配置,即激活安全管理器,然后告诉它只允许一切(我不运行服务器,所以不要怪我!)。但是,当我部署WAR时,它会失败,因为有几个堆栈跟踪包含以下内容:

Caused by: java.security.AccessControlException: access denied ("java.util.PropertyPermission" "java.version" "read")
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:457) ~[?:1.8.0_51]
    at java.security.AccessController.checkPermission(AccessController.java:884) ~[?:1.8.0_51]
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) ~[?:1.8.0_51]
    at java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1294) ~[?:1.8.0_51]
    at java.lang.System.getProperty(System.java:753) ~[?:1.8.0_51]
    at org.apache.commons.lang3.JavaVersion.maxVersion(JavaVersion.java:196) ~[commons-lang3-3.4.jar:3.4]

我已尝试通过以下方式将AllPermission显式授予我自己的应用程序:

grant codeBase "file:${catalina.home}/webapps/myApp/-" {
    permission java.security.AllPermission;
};

甚至显式地允许PropertyPermission读取java.version。所有这些都没有任何区别。同样的AccessControlException仍然会被抛出并阻止部署

这是怎么回事?如何对此进行故障排除


共 (1) 个答案

  1. # 1 楼答案

    我们的不是在部署期间,而是在重载测试期间

    我们更改了服务器中的连接器。xml从Nio2到Nio,它为我们解决了这个问题 组织。阿帕奇。郊狼。http11。Http11NioProtocol(NIO的第一个版本,而不是NIO2)

    我们没有禁用tomcat安全管理器,这违反了我们公司的政策