Я запустил свой Tomcat 9.0 в Windows 10 с:
-Djava.security.manager
-Djava.security.policy==C:\Program Files\Apache Software Foundation\Tomcat 9.0\conf\catalina.policy
-Djava.security.debug=access,failure
с использованием Соединителя типа org.apache.coyote.http11.Http11Nio2Protocol с включенным ssl.
Также у меня работает только (мое) приложение ROOT и ничего больше.
В рамках catalina.policy я определил (для первого теста):
grant codeBase "file:${catalina.base}/webapps/ROOT/-" {
permission java.security.AllPermission;
};
Когда я сейчас проверяю tomcat9-stderr.log, я нашел следующие записи:
access: access denied ("java.util.PropertyPermission" "org.apache.juli.logging.UserDataHelper.CONFIG" "read")
java.lang.Exception: Stack trace
at java.lang.Thread.dumpStack(Unknown Source)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPropertyAccess(Unknown Source)
at java.lang.System.getProperty(Unknown Source)
at org.apache.tomcat.util.log.UserDataHelper.<init>(UserDataHelper.java:57)
at org.apache.coyote.AbstractProcessor.<init>(AbstractProcessor.java:90)
at org.apache.coyote.http2.StreamProcessor.<init>(StreamProcessor.java:56)
at org.apache.coyote.http2.Http2UpgradeHandler.processStreamOnContainerThread(Http2UpgradeHandler.java:261)
at org.apache.coyote.http2.Http2UpgradeHandler.headersEnd(Http2UpgradeHandler.java:1356)
at org.apache.coyote.http2.Http2AsyncUpgradeHandler.headersEnd(Http2AsyncUpgradeHandler.java:37)
at org.apache.coyote.http2.Http2Parser.onHeadersComplete(Http2Parser.java:583)
at org.apache.coyote.http2.Http2Parser.readHeadersFrame(Http2Parser.java:272)
at org.apache.coyote.http2.Http2AsyncParser$FrameCompletionHandler.completed(Http2AsyncParser.java:167)
at org.apache.coyote.http2.Http2AsyncParser$FrameCompletionHandler.completed(Http2AsyncParser.java:85)
at org.apache.tomcat.util.net.Nio2Endpoint$Nio2SocketWrapper$VectoredIOCompletionHandler.completed(Nio2Endpoint.java:1148)
at org.apache.tomcat.util.net.Nio2Endpoint$Nio2SocketWrapper$VectoredIOCompletionHandler.completed(Nio2Endpoint.java:1117)
at org.apache.tomcat.util.net.SecureNio2Channel$2.completed(SecureNio2Channel.java:1047)
at org.apache.tomcat.util.net.SecureNio2Channel$2.completed(SecureNio2Channel.java:992)
at sun.nio.ch.Invoker.invokeUnchecked(Unknown Source)
at sun.nio.ch.Invoker$2.run(Unknown Source)
at sun.nio.ch.AsynchronousChannelGroupImpl$1.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
access: domain that failed ProtectionDomain null
null
<no principals>
null
А также два из них:
access: access denied ("java.lang.RuntimePermission" "accessClassInPackage.org.apache.tomcat.util.net")
java.lang.Exception: Stack trace
at java.lang.Thread.dumpStack(Unknown Source)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPackageAccess(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.apache.tomcat.util.net.SecureNio2Channel.flush(SecureNio2Channel.java:196)
at org.apache.tomcat.util.net.SecureNio2Channel.close(SecureNio2Channel.java:585)
at org.apache.tomcat.util.net.Nio2Endpoint$Nio2SocketWrapper.close(Nio2Endpoint.java:932)
at org.apache.coyote.http2.Http2UpgradeHandler.close(Http2UpgradeHandler.java:1010)
at org.apache.coyote.http2.Http2UpgradeHandler.upgradeDispatch(Http2UpgradeHandler.java:359)
at org.apache.coyote.http2.Http2AsyncUpgradeHandler.upgradeDispatch(Http2AsyncUpgradeHandler.java:37)
at org.apache.coyote.http2.Http2AsyncParser$FrameCompletionHandler.failed(Http2AsyncParser.java:240)
at org.apache.coyote.http2.Http2AsyncParser$FrameCompletionHandler.failed(Http2AsyncParser.java:85)
at org.apache.tomcat.util.net.Nio2Endpoint$Nio2SocketWrapper$VectoredIOCompletionHandler.failed(Nio2Endpoint.java:1184)
at org.apache.tomcat.util.net.Nio2Endpoint$Nio2SocketWrapper$VectoredIOCompletionHandler.failed(Nio2Endpoint.java:1117)
at org.apache.tomcat.util.net.SecureNio2Channel$2.failed(SecureNio2Channel.java:1055)
at org.apache.tomcat.util.net.SecureNio2Channel$2.completed(SecureNio2Channel.java:1049)
at org.apache.tomcat.util.net.SecureNio2Channel$2.completed(SecureNio2Channel.java:992)
at sun.nio.ch.Invoker.invokeUnchecked(Unknown Source)
at sun.nio.ch.Invoker$2.run(Unknown Source)
at sun.nio.ch.AsynchronousChannelGroupImpl$1.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
access: domain that failed ProtectionDomain null
null
<no principals>
null
Итак, я попытался добавить
permission java.util.PropertyPermission "org.apache.juli.logging.UserDataHelper.CONFIG", "read";
permission java.lang.RuntimePermission "accessClassInPackage.org.apache.tomcat.util.net";
в разных местах в файле catalina.policy (для веб-приложений / ROOT /, РАЗРЕШЕНИЯ НА КОД CATALINA, РАЗРЕШЕНИЯ НА ВЕБ-ПРИЛОЖЕНИЕ).
Но все это не сделает два отказа в доступе исчезающими.
Итак, мой вопрос, как очистить эти два отказа в доступе?
Обновление 1
Для accessClassInPackage.org.apache.tomcat.util.net мне интересно, почему это происходит, потому что org.apache.tomcat.util.net находится в Tomcat / lib / tomcat-coyote.jar, который получил разрешения от:
grant codeBase "file:${catalina.home}/lib/-" {
permission java.security.AllPermission;
};
Обновление 2
Изменено
-Djava.security.policy=
до
-Djava.security.policy==
это пусть
access denied ("java.lang.RuntimePermission" "accessClassInPackage.org.apache.tomcat.util.net")
vanish - так что только регистрация juli все еще запрещена.
Обновление 3
Теперь я получил исключение для дополнения:
access: access denied ("java.net.SocketPermission" "127.0.0.1:15484" "accept,resolve")
11-Feb-2019 14:46:43.895 SCHWERWIEGEND [https-openssl-nio2-443-exec-7] org.apache.tomcat.util.net.Nio2Endpoint$Nio2Acceptor.failed Socket accept failed
java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:15478" "accept,resolve")
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkAccept(Unknown Source)
at sun.nio.ch.WindowsAsynchronousServerSocketChannelImpl$AcceptTask$1.run(Unknown Source)
at sun.nio.ch.WindowsAsynchronousServerSocketChannelImpl$AcceptTask$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.nio.ch.WindowsAsynchronousServerSocketChannelImpl$AcceptTask.finishAccept(Unknown Source)
at sun.nio.ch.WindowsAsynchronousServerSocketChannelImpl$AcceptTask.completed(Unknown Source)
at sun.nio.ch.Iocp$EventHandlerTask.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
at sun.misc.InnocuousThread.run(Unknown Source)
Что странно, потому что
org.apache.tomcat.util.net.Nio2Endpoint
Является частью
tomcat/lib/tomcat-coyote.jar
который не должен иметь ограничений по
grant codeBase "file:${catalina.home}/lib/-" {
permission java.security.AllPermission;
};
Более странно, что за этим следует:
access: access allowed ("java.net.SocketPermission" "127.0.0.1:15485" "accept,resolve")
Что делает все это более загадочным.
Btw. похоже, что то же самое верно для UserDataHelper , где доступ запрещен, кроме запрещенного доступа.