Java tutorial
/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.web.webdav; import java.io.File; import java.io.IOException; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.io.FilenameUtils; import org.apache.jackrabbit.webdav.DavLocatorFactory; import org.apache.jackrabbit.webdav.DavResource; import org.apache.jackrabbit.webdav.DavResourceFactory; import org.apache.jackrabbit.webdav.DavSessionProvider; import org.apache.jackrabbit.webdav.WebdavRequest; import org.apache.jackrabbit.webdav.server.AbstractWebdavServlet; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; import com.enonic.cms.core.servlet.ServletRequestAccessor; public final class SimpleDavServlet extends AbstractWebdavServlet { private final static Logger LOG = LoggerFactory.getLogger(SimpleDavServlet.class); private final static String AUTHENTICATE_HEADER_VALUE = "Basic Realm=\"Enonic Webdav Server\""; private DavSessionProvider sessionProvider; private DavLocatorFactory locatorFactory; private DavResourceFactory resourceFactory; private DavConfiguration configuration; private File resourceRoot; public void init(final ServletConfig config) throws ServletException { final ServletContext servletContext = config.getServletContext(); this.configuration = getConfiguration(servletContext); this.resourceRoot = configuration.getResourceRoot(); setLocatorFactory(new DavLocatorFactoryImpl()); setDavSessionProvider(new DavSessionProviderImpl(configuration)); setResourceFactory(new DavResourceFactoryImpl(configuration)); super.init(config); } private DavConfiguration getConfiguration(final ServletContext context) { final WebApplicationContext appContext = WebApplicationContextUtils .getRequiredWebApplicationContext(context); return appContext.getBean(DavConfiguration.class); } protected void service(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException { ServletRequestAccessor.setRequest(request); ensureResourceRootExists(); if (isHidden(request)) { response.setStatus(HttpServletResponse.SC_NOT_FOUND); return; } super.service(request, response); } private boolean isHidden(final HttpServletRequest request) { final String uri = request.getRequestURI(); final String name = FilenameUtils.getName(uri); return this.configuration.isHidden(name); } private void ensureResourceRootExists() { if (!resourceRoot.exists()) { final boolean created = resourceRoot.mkdirs(); if (!created) { LOG.error("cannot create resource root at " + resourceRoot.getAbsolutePath()); } } } @Override protected boolean isPreconditionValid(final WebdavRequest req, final DavResource resource) { return true; } @Override public DavSessionProvider getDavSessionProvider() { return this.sessionProvider; } @Override public void setDavSessionProvider(final DavSessionProvider sessionProvider) { this.sessionProvider = sessionProvider; } @Override public DavLocatorFactory getLocatorFactory() { return this.locatorFactory; } @Override public void setLocatorFactory(final DavLocatorFactory locatorFactory) { this.locatorFactory = locatorFactory; } @Override public DavResourceFactory getResourceFactory() { return this.resourceFactory; } @Override public void setResourceFactory(final DavResourceFactory resourceFactory) { this.resourceFactory = resourceFactory; } @Override public String getAuthenticateHeaderValue() { return AUTHENTICATE_HEADER_VALUE; } }