⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 abstractwebdavservlet.java

📁 jsr170接口的java实现。是个apache的开源项目。
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements.  See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License.  You may obtain a copy of the License at * *      http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.apache.jackrabbit.server;import org.apache.jackrabbit.server.io.IOUtil;import org.apache.jackrabbit.webdav.DavConstants;import org.apache.jackrabbit.webdav.DavException;import org.apache.jackrabbit.webdav.DavLocatorFactory;import org.apache.jackrabbit.webdav.DavMethods;import org.apache.jackrabbit.webdav.DavResource;import org.apache.jackrabbit.webdav.DavResourceFactory;import org.apache.jackrabbit.webdav.DavServletRequest;import org.apache.jackrabbit.webdav.DavServletResponse;import org.apache.jackrabbit.webdav.DavSessionProvider;import org.apache.jackrabbit.webdav.MultiStatus;import org.apache.jackrabbit.webdav.MultiStatusResponse;import org.apache.jackrabbit.webdav.WebdavRequest;import org.apache.jackrabbit.webdav.WebdavRequestImpl;import org.apache.jackrabbit.webdav.WebdavResponse;import org.apache.jackrabbit.webdav.WebdavResponseImpl;import org.apache.jackrabbit.webdav.DavCompliance;import org.apache.jackrabbit.webdav.io.InputContext;import org.apache.jackrabbit.webdav.io.InputContextImpl;import org.apache.jackrabbit.webdav.io.OutputContext;import org.apache.jackrabbit.webdav.io.OutputContextImpl;import org.apache.jackrabbit.webdav.lock.ActiveLock;import org.apache.jackrabbit.webdav.lock.LockInfo;import org.apache.jackrabbit.webdav.observation.EventDiscovery;import org.apache.jackrabbit.webdav.observation.ObservationResource;import org.apache.jackrabbit.webdav.observation.Subscription;import org.apache.jackrabbit.webdav.observation.SubscriptionInfo;import org.apache.jackrabbit.webdav.ordering.OrderPatch;import org.apache.jackrabbit.webdav.ordering.OrderingResource;import org.apache.jackrabbit.webdav.property.DavProperty;import org.apache.jackrabbit.webdav.property.DavPropertyName;import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;import org.apache.jackrabbit.webdav.search.SearchConstants;import org.apache.jackrabbit.webdav.search.SearchInfo;import org.apache.jackrabbit.webdav.search.SearchResource;import org.apache.jackrabbit.webdav.security.AclProperty;import org.apache.jackrabbit.webdav.security.AclResource;import org.apache.jackrabbit.webdav.transaction.TransactionInfo;import org.apache.jackrabbit.webdav.transaction.TransactionResource;import org.apache.jackrabbit.webdav.version.DeltaVConstants;import org.apache.jackrabbit.webdav.version.DeltaVResource;import org.apache.jackrabbit.webdav.version.LabelInfo;import org.apache.jackrabbit.webdav.version.MergeInfo;import org.apache.jackrabbit.webdav.version.OptionsInfo;import org.apache.jackrabbit.webdav.version.OptionsResponse;import org.apache.jackrabbit.webdav.version.UpdateInfo;import org.apache.jackrabbit.webdav.version.VersionControlledResource;import org.apache.jackrabbit.webdav.version.VersionResource;import org.apache.jackrabbit.webdav.version.VersionableResource;import org.apache.jackrabbit.webdav.version.ActivityResource;import org.apache.jackrabbit.webdav.version.report.Report;import org.apache.jackrabbit.webdav.version.report.ReportInfo;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.w3c.dom.Document;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.ArrayList;import java.util.List;/** * <code>AbstractWebdavServlet</code> * <p/> */abstract public class AbstractWebdavServlet extends HttpServlet implements DavConstants {    // todo respect Position header    /**     * default logger     */    private static Logger log = LoggerFactory.getLogger(AbstractWebdavServlet.class);    /**     * Default value for the 'WWW-Authenticate' header, that is set, if request     * results in a {@link DavServletResponse#SC_UNAUTHORIZED 401 (Unauthorized)}     * error.     *     * @see #getAuthenticateHeaderValue()     */    public static final String DEFAULT_AUTHENTICATE_HEADER = "Basic realm=\"Jackrabbit Webdav Server\"";    /**     * Checks if the precondition for this request and resource is valid.     *     * @param request     * @param resource     * @return     */    abstract protected boolean isPreconditionValid(WebdavRequest request, DavResource resource);    /**     * Returns the <code>DavSessionProvider</code>.     *     * @return the session provider     */    abstract public DavSessionProvider getDavSessionProvider();    /**     * Returns the <code>DavSessionProvider</code>.     *     * @param davSessionProvider     */    abstract public void setDavSessionProvider(DavSessionProvider davSessionProvider);    /**     * Returns the <code>DavLocatorFactory</code>.     *     * @return the locator factory     */    abstract public DavLocatorFactory getLocatorFactory();    /**     * Sets the <code>DavLocatorFactory</code>.     *     * @param locatorFactory     */    abstract public void setLocatorFactory(DavLocatorFactory locatorFactory);    /**     * Returns the <code>DavResourceFactory</code>.     *     * @return the resource factory     */    abstract public DavResourceFactory getResourceFactory();    /**     * Sets the <code>DavResourceFactory</code>.     *     * @param resourceFactory     */    abstract public void setResourceFactory(DavResourceFactory resourceFactory);    /**     * Returns the value of the 'WWW-Authenticate' header, that is returned in     * case of 401 error.     *     * @return value of the 'WWW-Authenticate' header     */    abstract public String getAuthenticateHeaderValue();    /**     * Service the given request.     *     * @param request     * @param response     * @throws ServletException     * @throws IOException     */    protected void service(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        WebdavRequest webdavRequest = new WebdavRequestImpl(request, getLocatorFactory());        // DeltaV requires 'Cache-Control' header for all methods except 'VERSION-CONTROL' and 'REPORT'.        int methodCode = DavMethods.getMethodCode(request.getMethod());        boolean noCache = DavMethods.isDeltaVMethod(webdavRequest) && !(DavMethods.DAV_VERSION_CONTROL == methodCode || DavMethods.DAV_REPORT == methodCode);        WebdavResponse webdavResponse = new WebdavResponseImpl(response, noCache);        try {            // make sure there is a authenticated user            if (!getDavSessionProvider().attachSession(webdavRequest)) {                return;            }            // check matching if=header for lock-token relevant operations            DavResource resource = getResourceFactory().createResource(webdavRequest.getRequestLocator(), webdavRequest, webdavResponse);            if (!isPreconditionValid(webdavRequest, resource)) {                webdavResponse.sendError(DavServletResponse.SC_PRECONDITION_FAILED);                return;            }            if (!execute(webdavRequest, webdavResponse, methodCode, resource)) {                super.service(request, response);            }        } catch (DavException e) {            if (e.getErrorCode() == HttpServletResponse.SC_UNAUTHORIZED) {                webdavResponse.setHeader("WWW-Authenticate", getAuthenticateHeaderValue());                webdavResponse.sendError(e.getErrorCode(), e.getStatusPhrase());            } else {                webdavResponse.sendError(e);            }        } finally {            getDavSessionProvider().releaseSession(webdavRequest);        }    }    /**     * Executes the respective method in the given webdav context     *     * @param request     * @param response     * @param method     * @param resource     * @throws ServletException     * @throws IOException     * @throws DavException     */    protected boolean execute(WebdavRequest request, WebdavResponse response,                              int method, DavResource resource)            throws ServletException, IOException, DavException {        switch (method) {            case DavMethods.DAV_GET:                doGet(request, response, resource);                break;            case DavMethods.DAV_HEAD:                doHead(request, response, resource);                break;            case DavMethods.DAV_PROPFIND:                doPropFind(request, response, resource);                break;            case DavMethods.DAV_PROPPATCH:                doPropPatch(request, response, resource);                break;            case DavMethods.DAV_POST:                doPost(request, response, resource);                break;            case DavMethods.DAV_PUT:                doPut(request, response, resource);                break;            case DavMethods.DAV_DELETE:                doDelete(request, response, resource);                break;            case DavMethods.DAV_COPY:                doCopy(request, response, resource);                break;            case DavMethods.DAV_MOVE:                doMove(request, response, resource);                break;            case DavMethods.DAV_MKCOL:                doMkCol(request, response, resource);                break;            case DavMethods.DAV_OPTIONS:                doOptions(request, response, resource);                break;            case DavMethods.DAV_LOCK:                doLock(request, response, resource);                break;            case DavMethods.DAV_UNLOCK:                doUnlock(request, response, resource);                break;            case DavMethods.DAV_ORDERPATCH:                doOrderPatch(request, response, resource);                break;            case DavMethods.DAV_SUBSCRIBE:                doSubscribe(request, response, resource);                break;            case DavMethods.DAV_UNSUBSCRIBE:                doUnsubscribe(request, response, resource);                break;            case DavMethods.DAV_POLL:                doPoll(request, response, resource);                break;            case DavMethods.DAV_SEARCH:                doSearch(request, response, resource);                break;            case DavMethods.DAV_VERSION_CONTROL:                doVersionControl(request, response, resource);                break;            case DavMethods.DAV_LABEL:                doLabel(request, response, resource);                break;            case DavMethods.DAV_REPORT:                doReport(request, response, resource);                break;            case DavMethods.DAV_CHECKIN:                doCheckin(request, response, resource);                break;            case DavMethods.DAV_CHECKOUT:                doCheckout(request, response, resource);                break;            case DavMethods.DAV_UNCHECKOUT:                doUncheckout(request, response, resource);                break;            case DavMethods.DAV_MERGE:                doMerge(request, response, resource);                break;            case DavMethods.DAV_UPDATE:                doUpdate(request, response, resource);                break;            case DavMethods.DAV_MKWORKSPACE:                doMkWorkspace(request, response, resource);                break;            case DavMethods.DAV_MKACTIVITY:                doMkActivity(request, response, resource);                break;            case DavMethods.DAV_BASELINE_CONTROL:                doBaselineControl(request, response, resource);                break;            case DavMethods.DAV_ACL:                doAcl(request, response, resource);                break;            default:                // any other method                return false;        }        return true;    }    /**     * The OPTION method     *     * @param request     * @param response     * @param resource     */    protected void doOptions(WebdavRequest request, WebdavResponse response,                             DavResource resource) throws IOException, DavException {        response.addHeader(DavConstants.HEADER_DAV, resource.getComplianceClass());        response.addHeader("Allow", resource.getSupportedMethods());        response.addHeader("MS-Author-Via", DavConstants.HEADER_DAV);        if (resource instanceof SearchResource) {            String[] langs = ((SearchResource) resource).getQueryGrammerSet().getQueryLanguages();            for (int i = 0; i < langs.length; i++) {                response.addHeader(SearchConstants.HEADER_DASL, "<" + langs[i] + ">");            }        }        // with DeltaV the OPTIONS request may contain a Xml body.        OptionsResponse oR = null;        OptionsInfo oInfo = request.getOptionsInfo();        if (oInfo != null && resource instanceof DeltaVResource) {            oR = ((DeltaVResource) resource).getOptionResponse(oInfo);        }        if (oR == null) {            response.setStatus(DavServletResponse.SC_OK);        } else {            response.sendXmlResponse(oR, DavServletResponse.SC_OK);        }    }    /**     * The HEAD method     *     * @param request     * @param response     * @param resource     * @throws java.io.IOException     */    protected void doHead(WebdavRequest request, WebdavResponse response,                          DavResource resource) throws IOException {        spoolResource(request, response, resource, false);    }    /**     * The GET method     *     * @param request     * @param response     * @param resource     * @throws IOException     */    protected void doGet(WebdavRequest request, WebdavResponse response,                         DavResource resource) throws IOException {        spoolResource(request, response, resource, true);    }    /**     * @param request     * @param response     * @param resource     * @param sendContent     * @throws IOException     */    private void spoolResource(WebdavRequest request, WebdavResponse response,                               DavResource resource, boolean sendContent)            throws IOException {        if (!resource.exists()) {            response.sendError(HttpServletResponse.SC_NOT_FOUND);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -