2009-07-13 7 views
0

Je continue à recevoir une exception Java IO lorsque l'application tente d'initialiser le journal. Voici la trace de la pile. /var/lib/tomcat6/logs a la permission pour quiconque de lire et d'écrire.Java AccessControlException: obtention de l'erreur File IO lors de la tentative d'écriture du fichier journal

 
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) 

Répondre

1

La trace de la pile d'exception indique ce n'est pas une erreur d'autorisation de fichier, mais que vous exécutez Tomcat sous un gestionnaire de sécurité, pour que vous n'avez pas configuré l'autorisation pour lui permettre d'écrire à ce chemin.

policytool est un programme soigné pour vous aider à créer des fichiers de politique avec lesquels vous pouvez configurer le gestionnaire de sécurité.

0

Je ne suis pas sûr d'avoir exactement le même problème que vous ou que j'ai même complètement résolu le mien, cependant, voici un coup d'aide. En bref, je pense que cela pourrait avoir à voir avec le Java Security Manager et la configuration de votre chemin $ CATALINA_BASE.

je reçois des messages d'erreur suivants de mon Tomcat6 Solr 1.3 installer sur une base quotidienne:

java.security.AccessControlException: Accès refusé (java.io.FilePermission/var/lib/tomcat6/logs lire) à java.security.AccessControlContext.checkPermission (AccessControlContext.java:342) à java.security.AccessController.checkPermission (AccessController.java:553) à java.lang.SecurityManager.checkPermission (SecurityManager.java:549) à l'adresse java.lang.SecurityManager.checkRead (SecurityManager.java:888) at java.io.File.exists (File.java:748) at java.io.File.mkdi rs (File.java:1195)

.......

Les autorisations de fichier ont été correctement définies pour le répertoire des journaux et les journaux ont été créés après que le message a été lancé la première fois. Mais l'erreur se reproduirait le lendemain avec la création d'un fichier journal nouvellement pivoté. Après un peu d'excavation, j'ai appris que l'erreur était lancée par Java Security Manager et qu'elle n'avait rien à voir avec les permissions des fichiers OS. Comme il s'est avéré que les paramètres de journalisation JSM ont été chassés du chemin $ CATALINA_BASE qui n'a pas été correctement configuré dans mon installation. $ CATALINA_BASE doit pointer vers l'emplacement des fichiers créés dynamiquement pour tomcat, cependant, lorsqu'il n'est pas configuré, il est par défaut le répertoire $ CATALINA_HOME qui est l'emplacement des binaires de tomcat. Par conséquent, je ne suis pas sûr que JSM dispose des autorisations correctes pour manipuler les fichiers dans le répertoire des journaux.

J'ai ajouté CATALINA_BASE = "/ var/lib/tomcat6" à mon fichier catalina.sh et je crois que j'ai résolu le problème.

Espérons que ce soit correct/informations utiles!

Questions connexes