Hi,
I encountered a permission error when deploying my application on
Tomcat 7 with security manager enabled.
My application (TestWink.war) consists of only 1 REST resource (the
TestResource.class) which is basically a hello world. The complete
structure of TestWink.war is:
META-INF/
MANIFEST.MF
WEB-INF/
classes/
my/test/packages/TestResource.class
lib/
activation-1.1.jar
commons-lang-2.3.jar
jaxb-api-2.2.jar
jaxb-impl-2.2.1.1.jar
jsr311-api-1.1.1.jar
slf4j-api-1.6.1.jar
slf4j-simple-1.6.1.jar
stax-api-1.0-2.jar
wink-1.1.3-incubating.jar
wink-common-1.1.3-incubating.jar
wink-server-1.1.3-incubating.jar
resources
web.xml
The error I got (stack trace is at the end of this message) is about
permission error on META-INF/wink-default.properties.
I'm a bit puzzled about the error. The offending file is part of
wink-1.1.3-incubating.jar which Tomcat deploys under TestWink's servlet
context (i.e., ${tomcat.home}/webaps/TestWink). And as I understand,
Tomcat's security policy should enable TestResource to access any
thing under this servlet context (CMIIW).
Another thing I notice from observing the log, when debug is on for
the Java security manager, is that META-INF/wink-default.properties
is the only file accessed with its relative path. All the other files
are accessed using their full path. I'm not sure if this points out
anything.
Any insight on what's happening?
===== Stack trace ====================
Jul 27, 2011 4:58:35 PM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive TestWink.war
18 ["http-bio-8080"-exec-12] ERROR
org.apache.wink.server.internal.servlet.RestServlet - access denied
(java.io.FilePermission META-INF/wink-default.properties read)
java.security.AccessControlException: access denied (java.io.FilePermission
META-INF/wink-default.properties read)
at
java.security.AccessControlContext.checkPermission(AccessControlContext.java:393)
at
java.security.AccessController.checkPermission(AccessController.java:553)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
at java.lang.SecurityManager.checkRead(SecurityManager.java:888)
at java.io.File.isFile(File.java:793)
at
org.apache.wink.common.internal.utils.FileLoader.loadFileAsStream(FileLoader.java:87)
at
org.apache.wink.server.internal.utils.ServletFileLoader.loadFileAsStream(ServletFileLoader.java:52)
at
org.apache.wink.server.internal.servlet.RestServlet.loadProperties(RestServlet.java:295)
at
org.apache.wink.server.internal.servlet.RestServlet.getProperties(RestServlet.java:190)
at
org.apache.wink.server.internal.servlet.RestServlet.getDeploymentConfiguration(RestServlet.java:178)
at
org.apache.wink.server.internal.servlet.RestServlet.createRequestProcessor(RestServlet.java:124)
at
org.apache.wink.server.internal.servlet.RestServlet.init(RestServlet.java:94)
at javax.servlet.GenericServlet.init(GenericServlet.java:160)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:273)
at
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:270)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAsPrivileged(Subject.java:537)
at
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:305)
at
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:165)
at
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:119)
at
org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1195)
at
org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1114)
at
org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:824)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:403)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:301)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:162)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:140)
at
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:679)
Regards,
Verdi