博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WebDAV
阅读量:6691 次
发布时间:2019-06-25

本文共 2144 字,大约阅读时间需要 7 分钟。

  hot3.png

编者注

主要目的,各种网盘并不是控制在个人手中,而且不同网盘,导致文件分散,难以整合。多台计算机的使用,软件的环境位置发生变化,一致性无法保证。通过搜索并对比文件分享协议。WebDAV能够达到并完成该内容。由于Windows 10加入了WebDAV,Linux支持WebDAV,Mac也同样支持WebDAV。则使用WebDAV是能够跨平台进行使用与操作的。

目标

这里并不是想要简单配置并使用WebDAV,而是希望通过某种方式,实现用户登陆与权限限制,保证除了个别软件需要直接通过文件系统进行读写外,完整的实现网盘功能(一般文件的读写),特殊目录只读功能。在脑子里面的理想型文件共享,与服务提供。优先支持常用服务,替代传统方式。

Apache Tomcat WebDAV

通过查询,否决了Apache JackRabbit的WebDAV。再次搜索发现Tomcat HTTP Nigix支持WebDAV协议。但是均只是简单的实现。和需求不符。

由于本人Java熟悉,决定由Java入手。通过查看Tomcat资料,了解到org.apache.catalina.servlets.WebdavSerlvet.java为WebDAV的实现。

需要下载tomcat源代码,当前还不能确定,能否修改成为Spring的项目。

暂时架构决定

Spring || VFS

阅读与分析WebdavServlet

通过阅读代码,能够了解Webdav所需要的函数内容,通过如下service函数

/**     * Handles the special WebDAV methods.     */    @Override    protected void service(HttpServletRequest req, HttpServletResponse resp)        throws ServletException, IOException {        final String path = getRelativePath(req);        // Block access to special subdirectories.        // DefaultServlet assumes it services resources from the root of the web app        // and doesn't add any special path protection        // WebdavServlet remounts the webapp under a new path, so this check is        // necessary on all methods (including GET).        if (isSpecialPath(path)) {            resp.sendError(WebdavStatus.SC_NOT_FOUND);            return;        }        final String method = req.getMethod();        if (debug > 0) {            log("[" + method + "] " + path);        }        if (method.equals(METHOD_PROPFIND)) {            doPropfind(req, resp);        } else if (method.equals(METHOD_PROPPATCH)) {            doProppatch(req, resp);        } else if (method.equals(METHOD_MKCOL)) {            doMkcol(req, resp);        } else if (method.equals(METHOD_COPY)) {            doCopy(req, resp);        } else if (method.equals(METHOD_MOVE)) {            doMove(req, resp);        } else if (method.equals(METHOD_LOCK)) {            doLock(req, resp);        } else if (method.equals(METHOD_UNLOCK)) {            doUnlock(req, resp);        } else {            // DefaultServlet processing            super.service(req, resp);        }    }

转载于:https://my.oschina.net/hava/blog/779885

你可能感兴趣的文章
2008 R2 证书服务器应用详解
查看>>
hive 动态分区太多问题
查看>>
Windows Server 2008 RemoteApp(二)---部署激活远程桌面授权服务器
查看>>
读取日志文件开发总结
查看>>
IOS --React Native
查看>>
Linux CPU
查看>>
Linux/Centos ntp时间同步,联网情况和无网情况配置
查看>>
初级网络运维工程师比赛题目
查看>>
跨交换机实现vlan实验报告
查看>>
jquery easyui滚动条部分设置介绍
查看>>
cannot find -lxxx问题
查看>>
预防云端开源项目打包 Redis Labs再更改模块
查看>>
超惊人!去年发生的身分外泄安全事件是2017的4倍
查看>>
oracle sqlplus免安装的配置instantclient-basiclite
查看>>
Java开发GUI之选择列表
查看>>
一、分布式商城架构逻辑图
查看>>
机器人是如何完成避障的?机器人避障解决方案解读
查看>>
通过错误堆栈信息和源码分析错误来源
查看>>
C和C++ 读写文件速度问题
查看>>
layer.mobile 弹出框插件(2.0版)
查看>>