Проблема:
После установки и запуска приложения, использующего для логирования какой-либо appender, не формируются журналы приложения.
При этом в журнале сервера приложений появляются сообщения “Access denied“:
1 2 3 4 5 6 7 8 9 10 |
Trace: 2012/12/06 11:03:20.582 01 t=9B7628 c=UNK key=P8 (13007002) ThreadId: 0000004e FunctionName: com.ibm.ws.security.core.SecurityManager SourceId: com.ibm.ws.security.core.SecurityManager Category: WARNING ExtendedMessage: BBOO0221W: SECJ6205W: The current Java 2 Security policy reported a potential violation of a Java 2 Security Permission. Refer to the InfoCenter for further information. Permission: /service/WAS/logs/ed/testedetd/ORD: Access denied (java.io.FilePermission /service/WAS/logs/ed/testedetd/ORD read) Code: ch.qos.logback.core.rolling.helper.FileFilterUtil in {file:/WebSphere/WAS/ed/ed2/AppServer/profiles/default/installedApps/ed/ORD_1.0_t.ear/ORDWeb.war/WEB-INF/lib/logback-core-1.0.6.1.jar} |
В файле was.policy прописано:
1 2 3 4 5 6 7 8 9 10 |
grant codeBase "file:${application}" { permission java.lang.RuntimePermission "stopThread"; permission java.lang.RuntimePermission "modifyThread"; permission java.lang.RuntimePermission "modifyThreadGroup"; permission java.lang.reflect.ReflectPermission "suppressAccessChecks"; permission java.lang.RuntimePermission "accessDeclaredMembers"; permission java.lang.RuntimePermission "createClassLoader"; permission java.io.FilePermission "${app.installed.path}${/}-", "read, write"; permission java.io.FilePermission "/service/WAS/logs/ed/testedetd/ORD${/}-", "read, write"; }; |
А на целевую директорию даны права 777.
Решение:
Это происходит из-за того, что разные аппендеры по-разному начинают проверять права доступа к файлам и директориям. Необходимо модифицировать was.policy, добавив строки:
1 2 |
permission java.io.FilePermission "/service/WAS/logs/ed/testedetd/ORD${/}*", "read, write"; permission java.io.FilePermission "/service/WAS/logs/ed/testedetd/ORD", "read, write"; |
То есть по-разному задаем маску расположения журналов приложения. В итоге получается:
1 2 3 4 5 6 7 8 9 10 11 12 |
grant codeBase "file:${application}" { permission java.lang.RuntimePermission "stopThread"; permission java.lang.RuntimePermission "modifyThread"; permission java.lang.RuntimePermission "modifyThreadGroup"; permission java.lang.reflect.ReflectPermission "suppressAccessChecks"; permission java.lang.RuntimePermission "accessDeclaredMembers"; permission java.lang.RuntimePermission "createClassLoader"; permission java.io.FilePermission "${app.installed.path}${/}-", "read, write"; permission java.io.FilePermission "/service/WAS/logs/ed/testedetd/ORD${/}-", "read, write"; permission java.io.FilePermission "/service/WAS/logs/ed/testedetd/ORD${/}*", "read, write"; permission java.io.FilePermission "/service/WAS/logs/ed/testedetd/ORD", "read, write"; }; |
После выполненных действий нужно переустановить/обновить приложение.
Leave a Reply