2009-07-13 3 views
0

응용 프로그램이 로그를 초기화하려고 할 때 Java IO 예외가 계속 발생합니다. 다음은 스택 추적입니다. /var/lib/tomcat6/logs에는 누구든지 읽기 및 쓰기 권한이 있습니다.Java AccessControlException : 로그 파일을 쓰려고 할 때 파일 입출력 오류가 계속 발생합니다.

 
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) 

답변

1

예외 스택 추적은 파일 권한 오류 아니다 나타냅니다 아니라, 당신은 당신이 그 경로에 쓸 수 있도록 권한을 설정하지 않은 보안 관리자, 아래에서 Tomcat을 실행하고 있습니다.

policytool은 보안 관리자를 구성 할 수있는 정책 파일을 만드는 데 도움이되는 깔끔한 프로그램입니다.

0

내가 너와 똑같은 문제를 가지고 있는지, 아니면 내 자신을 완전히 해결했는지 확신 할 수 없다. 그러나 여기에 도움이된다. 즉, Java Security Manager 및 $ CATALINA_BASE 경로 구성과 관련이있을 수 있습니다.

java.security.AccessControlException : 액세스 거부 (java.io.FilePermission의/var에/lib 디렉토리/tomcat6/로그

나는 매일 설치 내 Tomcat6 SOLR 1.3에서 다음과 같은 오류 메시지를 받았는데 java.security.AccessControlContext.checkPermission (AccessControlContext.java : 342) 에서 java.security.AccessController.checkPermission (AccessController.java:553) 에서 java.lang.SecurityManager.checkPermission (SecurityManager.java:549) at java.lang.SecurityManager.checkRead (SecurityManager.java:888) at java.io.File.exists (File.java:748) at java.io.File.mkdi 메시지가 처음 던진 후 RS (File.java:1195)

.......

권한이 로그 디렉토리를 올바르게 설정 파일과 로그가 만들어졌다. 그러나 새로이 회전 된 로그 파일을 생성하면 다음날 오류가 다시 발생합니다.

파기를 한 후에 Java Security Manager에서 오류가 발생했으며 OS 파일 사용 권한과 관련이 없음을 알았습니다. 결과적으로 JSM 로깅 설정은 설치시 올바르게 구성되지 않은 $ CATALINA_BASE 경로에서 벗어났습니다. $ CATALINA_BASE는 tomcat에 대해 동적으로 생성 된 파일의 위치를 ​​가리켜 야하지만, 구성되지 않은 경우에는 tomcat 바이너리가 살고있는 $ CATALINA_HOME 디렉토리로 기본 설정됩니다. 결과적으로 JSM에 로그 디렉토리의 파일을 조작 할 수있는 올바른 권한이 있는지 확신 할 수 없습니다.

catalina.sh 파일에 CATALINA_BASE = "/ var/lib/tomcat6"을 추가했으며 문제를 해결했다고 생각합니다.

정보가 정확하고 유용합니다.

관련 문제