Java AccessControlException:尝试写入日志文件时出现获取文件IO错误
当应用程序试图初始化日志时,我不断收到一个Java IO异常。这是堆栈跟踪Java AccessControlException:尝试写入日志文件时出现获取文件IO错误,java,linux,Java,Linux,当应用程序试图初始化日志时,我不断收到一个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(Acces
/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)
java.security.AccessControlException:拒绝访问(java.io.FilePermission/var/lib/tomcat6/logs/socksserver.log write)
AccessControlContext.checkPermission(AccessControlContext.java:323)
java.security.AccessController.checkPermission(AccessController.java:546)
checkPermission(SecurityManager.java:532)
checkWrite(SecurityManager.java:962)
FileOutputStream.java.io.FileOutputStream。(FileOutputStream.java:169)
FileOutputStream.(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(本机方法)
invoke(NativeMethodAccessorImpl.java:39)
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(本机方法)
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)
run(Thread.java:619)
异常堆栈跟踪表明这不是一个文件权限错误,而是在安全管理器下运行Tomcat,您尚未设置允许它写入该路径的权限
policytool
是一个很好的程序,可以帮助您创建策略文件,您可以使用这些文件配置安全管理器。不确定我是否遇到了与您完全相同的问题,或者我是否已经完全解决了自己的问题,但是,这里有一个帮助的机会。简言之,我认为这可能与Java安全管理器和$CATALINA_基本路径的配置有关
我每天都从Tomcat6 Solr 1.3安装中收到以下错误消息:
java.security.AccessControlException:拒绝访问(java.io.FilePermission/var/lib/tomcat6/logs read)
位于java.security.AccessControlContext.checkPermission(AccessControlContext.java:342)
位于java.security.AccessController.checkPermission(AccessController.java:553)
位于java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
位于java.lang.SecurityManager.checkRead(SecurityManager.java:888)
位于java.io.File.exists(File.java:748)
位于java.io.File.mkdirs(File.java:1195)
日志目录的文件权限设置正确,日志是在第一次抛出消息后创建的。但是,在第二天创建新的旋转日志文件时,错误会再次出现
经过一番挖掘,我了解到错误是由Java安全管理器抛出的,与操作系统文件权限无关。事实证明,JSM日志记录设置是从$CATALINA_基本路径中删除的,在我的安装中没有正确配置$CATALINA_BASE应该指向为tomcat动态创建的文件的位置,但是,如果未配置,则默认为$CATALINA_HOME dir,这是tomcat二进制文件所在的位置。因此,我不确定JSM是否具有操作日志目录中文件的正确权限
我已经将CATALINA_BASE=“/var/lib/tomcat6”添加到我的CATALINA.sh文件中,并且相信我已经解决了这个问题
希望这是正确/有用的信息