Java AccessControlException: сохранение ошибки ввода-вывода файла при попытке записи файла журнала - PullRequest
0 голосов
/ 13 июля 2009

Я получаю исключение Java IO, когда приложение пытается инициализировать журнал. Вот трассировка стека. /var/lib/tomcat6/logs имеет разрешение на чтение и запись в нее.

java.security.AccessControlException: access denied (java.io.FilePermission /var/lib/tomcat6/logs/socksserver.log write)
    java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
    java.security.AccessController.checkPermission(AccessController.java:546)
    java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
    java.lang.SecurityManager.checkWrite(SecurityManager.java:962)
    java.io.FileOutputStream.<init>(FileOutputStream.java:169)
    java.io.FileOutputStream.<init>(FileOutputStream.java:102)
    common.log.ThreadFileWriter.init(ThreadFileWriter.java:50)
    common.log.LogConfiguration.initLog(LogConfiguration.java:50)
    socksviahttp.server.ServletSocks.logInit(ServletSocks.java:113)
    socksviahttp.server.ServletSocks.init(ServletSocks.java:59)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)
    java.security.AccessController.doPrivileged(Native Method)
    javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
    org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)
    org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)
    org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:115)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    java.lang.Thread.run(Thread.java:619)

Ответы [ 2 ]

1 голос
/ 13 июля 2009

Трассировка стека исключений указывает, что это не ошибка разрешения файла, а то, что вы запускаете Tomcat под менеджером безопасности, для которого вы не настроили разрешение, позволяющее ему писать по этому пути.

policytool - это аккуратная программа, помогающая создавать файлы политик, с которыми вы можете настроить менеджер безопасности.

0 голосов
/ 25 августа 2009

Не уверен, что у меня точно такая же проблема, как и у вас, или что я даже полностью решил свою собственную, однако, вот попытка помочь. Короче говоря, я думаю, что это может иметь отношение к диспетчеру безопасности Java и конфигурации вашего пути $ CATALINA_BASE.

Ежедневно я получаю следующие сообщения об ошибках от моей установки Tomcat6 Solr 1.3:

java.security.AccessControlException: доступ запрещен (чтение java.io.FilePermission / var / lib / tomcat6 / logs) в java.security.AccessControlContext.checkPermission (AccessControlContext.java:342) в java.security.AccessController.checkPermission (AccessController.java:553) at java.lang.SecurityManager.checkPermission (SecurityManager.java:549) at java.lang.SecurityManager.checkRead (SecurityManager.java:888) в java.io.File.exists (File.java:748) at java.io.File.mkdirs (File.java:1195)

.......

Права доступа к файлам были установлены правильно для каталога журнала, и журналы были созданы после того, как сообщение было брошено в первый раз. Но ошибка повторится на следующий день с созданием вновь повернутого файла журнала.

После небольшого копания я узнал, что Java Security Manager выдает ошибку, и не имеет никакого отношения к разрешениям файла ОС. Как оказалось, параметры ведения журнала JSM были удалены из пути $ CATALINA_BASE, который был неправильно настроен в моей установке. $ CATALINA_BASE должен указывать на местоположение динамически создаваемых файлов для tomcat, однако, если он не настроен, по умолчанию используется каталог $ CATALINA_HOME, в котором находятся двоичные файлы tomcat. В результате я не уверен, что JSM имел правильные разрешения для манипулирования файлами в каталоге журналов.

Я добавил CATALINA_BASE = "/ var / lib / tomcat6" в мой файл catalina.sh и считаю, что решил проблему.

Надеюсь, это правильная / полезная информация!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...