This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.jcr.davex-1.1.0 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-jcr-davex.git
commit 19eb0c87b1bd8853052aa6bc677c99c1c0fb7316 Author: Felix Meschberger <[email protected]> AuthorDate: Wed Nov 9 08:31:58 2011 +0000 SLING-2275 Consolidate configuration - use OsgiUtil to convert the configuration property - prevent indirect dependencies making Jackrabbit deps provided - preset Jackrabbit DavEx config: path prefix: same as servlet registration path home/tmp directory: sling.home/jackrabbit/tmp csrf protection: disabled no other parameters are set - use Sling settings to get sling.home location git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/jcr/davex@1199645 13f79535-47bb-0310-9956-ffa450edef68 --- pom.xml | 19 ++++- .../jcr/davex/impl/servlets/SlingDavExServlet.java | 89 ++++++++++++++-------- .../OSGI-INF/metatype/metatype.properties | 9 +-- 3 files changed, 75 insertions(+), 42 deletions(-) diff --git a/pom.xml b/pom.xml index d46d3e3..be90d86 100644 --- a/pom.xml +++ b/pom.xml @@ -57,7 +57,8 @@ </Import-Package> <Embed-Dependency> jackrabbit-jcr-server, - jackrabbit-webdav + jackrabbit-webdav, + org.apache.sling.commons.osgi;inline=org/apache/sling/commons/osgi/OsgiUtil.class </Embed-Dependency> </instructions> </configuration> @@ -88,13 +89,13 @@ <groupId>org.apache.jackrabbit</groupId> <artifactId>jackrabbit-jcr-server</artifactId> <version>2.2.9</version> - <scope>compile</scope> + <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.jackrabbit</groupId> <artifactId>jackrabbit-webdav</artifactId> <version>2.2.9</version> - <scope>compile</scope> + <scope>provided</scope> </dependency> <dependency> @@ -109,6 +110,18 @@ <version>1.0.6</version> <scope>provided</scope> </dependency> + <dependency> + <groupId>org.apache.sling</groupId> + <artifactId>org.apache.sling.commons.osgi</artifactId> + <version>2.0.6</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.apache.sling</groupId> + <artifactId>org.apache.sling.settings</artifactId> + <version>1.0.0</version> + <scope>provided</scope> + </dependency> <dependency> <groupId>javax.jcr</groupId> diff --git a/src/main/java/org/apache/sling/jcr/davex/impl/servlets/SlingDavExServlet.java b/src/main/java/org/apache/sling/jcr/davex/impl/servlets/SlingDavExServlet.java index 29f42d6..8e925bb 100644 --- a/src/main/java/org/apache/sling/jcr/davex/impl/servlets/SlingDavExServlet.java +++ b/src/main/java/org/apache/sling/jcr/davex/impl/servlets/SlingDavExServlet.java @@ -17,17 +17,14 @@ package org.apache.sling.jcr.davex.impl.servlets; import java.util.Dictionary; -import java.util.Enumeration; import java.util.Hashtable; import java.util.Map; - import javax.jcr.Credentials; import javax.jcr.LoginException; import javax.jcr.Repository; import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.SimpleCredentials; -import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import org.apache.felix.scr.annotations.Activate; @@ -38,25 +35,36 @@ import org.apache.felix.scr.annotations.Property; import org.apache.felix.scr.annotations.Reference; import org.apache.jackrabbit.server.SessionProvider; import org.apache.jackrabbit.server.remoting.davex.JcrRemotingServlet; +import org.apache.jackrabbit.webdav.util.CSRFUtil; import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.auth.core.AuthenticationSupport; -import org.osgi.service.component.ComponentContext; +import org.apache.sling.commons.osgi.OsgiUtil; +import org.apache.sling.settings.SlingSettingsService; import org.osgi.service.http.HttpService; +import org.slf4j.LoggerFactory; /** * DavEx WebDav servlet which acquires a Repository instance via the OSGi * service registry. * */ -@Component(label = "%dav.name", description = "%dav.description") -@Properties( { @Property(name = "alias", value = "/server"), - @Property(name = "init.resource-path-prefix", value = "/server"), - @Property(name = "init.missing-auth-mapping", value = ""), - @Property(name = "service.description", value = "Sling JcrRemoting Servlet"), - @Property(name = "service.vendor", value = "The Apache Software Foundation") }) +@SuppressWarnings("serial") +@Component(metatype = true, label = "%dav.name", description = "%dav.description") +@Properties({ @Property(name = "service.description", value = "Sling JcrRemoting Servlet"), + @Property(name = "service.vendor", value = "The Apache Software Foundation") }) public class SlingDavExServlet extends JcrRemotingServlet { - private static final String INIT_KEY_PREFIX = "init."; + /** + * Default value for the DavEx servlet registration. + */ + private static final String DEFAULT_ALIAS = "/server"; + + /** + * Name of the property to configure the location for the DavEx servlet + * registration. Default for the property is {@link #DEFAULT_ALIAS}. + */ + @Property(value=DEFAULT_ALIAS) + private static final String PROP_ALIAS = "alias"; @Reference private Repository repository; @@ -67,35 +75,52 @@ public class SlingDavExServlet extends JcrRemotingServlet { @Reference private AuthenticationSupport authSupport; + @Reference + private SlingSettingsService slingSettings; + + /** + * The path at which the DavEx servlet has successfully been + * registered in the {@link #activate(Map)} method. If this is + * <code>null</code> the DavEx servlet is not registered with the + * Http Service. + */ + private String servletAlias; + @Activate - protected void activate(final ComponentContext ctx) - throws Exception { + protected void activate(final Map<String, ?> config) { final AuthHttpContext context = new AuthHttpContext(); context.setAuthenticationSupport(authSupport); - final String alias = (String)ctx.getProperties().get("alias"); + final String alias = OsgiUtil.toString(config.get(PROP_ALIAS), DEFAULT_ALIAS); + + // prepare DavEx servlet config final Dictionary<String, String> initProps = new Hashtable<String, String>(); - @SuppressWarnings("unchecked") - final Enumeration<String> keyEnum = ctx.getProperties().keys(); - while ( keyEnum.hasMoreElements() ) { - final String key = keyEnum.nextElement(); - if ( key.startsWith(INIT_KEY_PREFIX) ) { - final String paramKey = key.substring(INIT_KEY_PREFIX.length()); - final Object paramValue = ctx.getProperties().get(key); - - if (paramValue != null) { - initProps.put(paramKey, paramValue.toString()); - } - } - } - this.httpService.registerServlet(alias, this, initProps, context); + // prefix to the servlet + initProps.put(INIT_PARAM_RESOURCE_PATH_PREFIX, alias); + + // put the tmp files into Sling home -- or configurable ??? + initProps.put(INIT_PARAM_HOME, slingSettings.getSlingHome() + "/jackrabbit"); + initProps.put(INIT_PARAM_TMP_DIRECTORY, "tmp"); + + // disable CSRF checks for now (should be handled by Sling) + initProps.put(INIT_PARAM_CSRF_PROTECTION, CSRFUtil.DISABLED); + + // register and handle registration failure + try { + this.httpService.registerServlet(alias, this, initProps, context); + this.servletAlias = alias; + } catch (Exception e) { + LoggerFactory.getLogger(getClass()).error("activate: Failed registering DavEx Servlet at " + alias, e); + } } @Deactivate - protected void deactivate(final Map<String, Object> props) { - final String alias = (String)props.get("alias"); - this.httpService.unregister(alias); + protected void deactivate() { + if (this.servletAlias != null) { + this.httpService.unregister(servletAlias); + this.servletAlias = null; + } } @Override @@ -112,7 +137,7 @@ public class SlingDavExServlet extends JcrRemotingServlet { public Session getSession(final HttpServletRequest req, final Repository repository, final String workspace) - throws LoginException, ServletException, RepositoryException { + throws LoginException, RepositoryException { final ResourceResolver resolver = (ResourceResolver) req.getAttribute(AuthenticationSupport.REQUEST_ATTRIBUTE_RESOLVER); if ( resolver != null ) { final Session session = resolver.adaptTo(Session.class); diff --git a/src/main/resources/OSGI-INF/metatype/metatype.properties b/src/main/resources/OSGI-INF/metatype/metatype.properties index de8962e..1eee1cd 100644 --- a/src/main/resources/OSGI-INF/metatype/metatype.properties +++ b/src/main/resources/OSGI-INF/metatype/metatype.properties @@ -33,11 +33,6 @@ dav.description = The DavEx Servlet allows direct access to the \ requests to this servlet do not pass by the Sling Main Servlet and request \ processing. -dav.root.name = Root Path -dav.root.description = The root path at which the DavEx Servlet is \ +alias.name = Root Path +alias.description = The root path at which the DavEx Servlet is \ accessible. The default value is "/server". - -dav.realm.name = Authentication Realm -dav.realm.description = The name of the HTTP Basic Authentication Realm \ - presented to the client to ask for authentication credentials to access the \ - repository. -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
