2009-07-13 8 views
0

アプリケーションがログを初期化しようとしても、Java IO例外が発生し続ける。ここにスタックトレースがあります。 /var/lib/tomcat6/logsには、誰でもそのユーザーに対して読み取りと書き込みを許可されています。Java AccessControlException:ログファイルを書き込もうとするとファイルIOエラーが発生する

 
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パスの設定が関係していると思います。私は私のTomcat6のSolrから1.3を次のエラーメッセージを取得してきた

は毎日のようにインストールします。

java.security.AccessControlException:アクセスが拒否されました(java.io.FilePermissionは/ var/libに/ tomcat6 /ログを(SecurityManager.java:549) の のjava.security.AccessControlContext.checkPermission(AccessControlContext.java:342) のjava.security.AccessController.checkPermission(AccessController.java:553) の場合は、 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のファイルの場所を指していなければなりませんが、設定されていないと、デフォルトで$ CATALINA_HOMEディレクトリに移動します。その結果、JSMにログディレクトリのファイルを操作するための正しいアクセス権があるかどうかはわかりません。

私はcatalina.shファイルにCATALINA_BASE = "/ var/lib/tomcat6"を追加しました。問題を解決したと思います。

これは間違いなく正しい情報です。

関連する問題