配置

应用程序属性

jmix.webdav.applications

设置文档格式和打开此格式的外部应用程序的映射。对于每个外部应用程序,可以在 "extensions" 属性配置一组文件扩展名。

例如,下面的映射使用 Microsoft PowerPoint 打开 PPT 和 PPTX 文件:

"ms-powerpoint":{\
  "name":"Microsoft PowerPoint",\
  "protocols":{"writable":"ms-powerpoint:ofe%7Cu%7C","read_only":"ms-powerpoint:ofv%7Cu%7C"},\
  "extensions":["ppt","pptx"]\
  }

默认值:

{"ms-word":{"name":"Microsoft Word","protocols":{"writable":"ms-word:ofe%7Cu%7C",\
  "read_only":"ms-word:ofv%7Cu%7C"},"extensions":["docx","doc","rtf"]},\
  "ms-excel":{"name":"Microsoft Excel","protocols":{"writable":"ms-excel:ofe%7Cu%7C",\
  "read_only":"ms-excel:ofv%7Cu%7C"},"extensions":["xls","xlsx"]},\
  "ms-powerpoint":{"name":"Microsoft PowerPoint",\
  "protocols":{"writable":"ms-powerpoint:ofe%7Cu%7C","read_only":"ms-powerpoint:ofv%7Cu%7C"},\
  "extensions":["ppt","pptx"]}}

LibreOffice 配置示例:

jmix.webdav.applications = {"vnd.libreoffice.command":\
  {"name":"LibreOffice","protocols":\
  {"writable":"vnd.libreoffice.command:ofe|u|",\
  "read_only":"vnd.libreoffice.command:ofv|u|"},\
  "extensions":["odt", "ods", "odp", "doc", "docx", "xls", "xlsx", "ppt", "pptx"]}}

jmix.webdav.authentication-method

设置认证类型。

默认值:basic

尽管我们不推荐,但是你仍然可以在该属性设置 digest,避免在服务器配置 HTTPS。此时,别忘了修改 jmix.webdav.url-prefix 属性,以便使用正确的服务协议和端口生成链接。另请注意,所有用户都必须在数据库中单独存储哈希密码。当更改用户的密码时,扩展组件会更新这些密码,因此必须在设置摘要认证后为每个用户执行此操作。

jmix.webdav.auto-generate-unique-resource-uri

如果该属性设置为 false,且新上传文档生成的 URI 已经分配给另一个文档时,会发生违反唯一性约束错误。

如果该属性设置为 true,且 URI 已经分配给另一个文档时,会自动生成 {id}.extension 格式的新路径。

默认值:true

jmix.webdav.document-versions-cleaning-cron

该属性支持以 cron 表达式修改 WebdavDocumentVersionsCleaningJob 的调度计划。

默认值:0 0 0 1 * ? *(每月一次)。

jmix.webdav.expired-lock-cleaning-cron

该属性支持以 cron 表达式修改 ExpiredLockCleaningJob 的调度计划。

默认值:0 0 0/2 ? * *(两小时一次)。

jmix.webdav.file-storage

定义一个用于存储 WebDAV 文件的 文件存储

默认使用 FileStorageLocator.getDefault() 返回的文件存储。

jmix.webdav.lock-timeout

定义文档 锁定 的默认间隔,单位为毫秒。

默认值:600000

jmix.webdav.use-default-document-versions-cleaner-quartz-configuration

该属性可以禁用创建和计划 WebdavDocumentVersionsCleaningJob 任务的默认配置。

默认值:true

jmix.webdav.use-default-expired-lock-cleaner-quartz-configuration

该属性可以禁用创建和计划 ExpiredLockCleaningJob 任务的默认配置。

默认值:true

jmix.webdav.url-prefix

定义 WebDAV 文档链接的前缀。

默认值:https://localhost:8443/webdav

值必须与应用程序 URL 的根路径一致,且带附加的 /webdav 路径。

jmix.webdav.versioning-enabled

对所有不带 @WebdavSupport 注解的 WebdavDocument 类型属性启用版本功能。

默认值:true

配置 HTTPS

服务器需要使用 HTTPS 对桌面端应用程序进行认证。下面是在开发环境设置 HTTPS 的简要说明。

使用自签名的证书仅适合测试。生产环境的应用程序必须使用由信任机构颁发的 SSL 证书。

创建 Keystore 文件

  1. 使用 JDK 提供的 keytool 工具 生成 Keystore 文件:

    keytool -genkey -keyalg RSA -alias localhost -keystore localhost.jks -validity 365 -keysize 2048

    会要求你设置 keystore 的密码和名称。记录输入的密码和名称。

  2. 从 keystore 导出证书:

    keytool -export -keystore localhost.jks -storepass <password> -alias localhost -file localhost.cer

    使用第一步输入的密码替换 <password>

  3. 在操作系统注册并信任证书。

    • macOS:

      • 在 Finder(访达)中双击 localhost.cer 文件。会自动打开 Keychain Access(钥匙串访问) 应用程序。

      • Certficates(证书) 标签页找到第一步输入名称下的证书。

      • 双击证书,并选择 Trust(信任) → When using this certificate: Always Trust(使用此证书时:始终信任)

生成可信证书

某些情况下,例如在最新的 LibreOffice 和 Firefox 版本中打开 WebDAV 文件,可能无法使用自签名证书。信任证书可以从SSL提供商处获得,也可以使用 certbot 生成。在开发阶段,可以发布自己的根证书,并用来对开发服务器的证书进行签名。简单起见,我们建议使用 mkcert 工具生成/维护证书。如果对 HTTPS 警告和限制不在意,可以跳过此部分。

  1. 从这个仓库安装 mkcerthttps://github.com/FiloSottile/mkcert。可以使用源码构建(需要安装 golang)并将二进制文件复制到 /usr/local/bin 或使用其提供的二进制文件。

  2. 在 path 中有 mkcert 后,可以生成并安装根证书:

    mkcert -install
  3. 切换到到 keystore 目录,并为开发服务器创建签名证书:

    mkcert -pkcs12 localhost 127.0.0.1 ::1
  4. 为项目创建带有证书的 .jks keystore 文件:

    keytool -importkeystore -srckeystore localhost+2.p12 -srcstoretype pkcs12 -destkeystore localhost.jks

服务配置

本节介绍当从 IDE 运行应用程序或者用可执行 JAR 运行时,如何使用上一节生成的证书。

  1. 创建 src/main/resources/<base-package>/keystore 目录,并将 localhost.jks 复制到该目录。

  2. application.properties 文件设置下列应用程序属性,用真实值替换 <base-package><password>

    # 启用 HTTPS
    server.ssl.enabled=true
    # keystore 的格式
    server.ssl.key-store-type = JKS
    # 包含证书的 keystore 路径
    server.ssl.key-store = classpath:<base-package>/keystore/localhost.jks
    # 生成 keystore 的密码
    server.ssl.key-store-password = <password>
    # 证书的映射别名
    server.ssl.key-alias = localhost
    
    # 服务端口
    server.port = 8443

维护作业

WebDAV 扩展组件包含几个维护作业。如需定期执行这些作业,请在项目中 安装 Quartz 扩展组件。

ExpiredLockCleaningJob

删除过期的 对象。这个任务默认每 2 小时运行一次。

如需修改任务调度,请使用 jmix.webdav.expired-lock-cleaning-cron 应用程序属性。

WebdavDocumentVersionsCleaningJob

删除没有文档链接的 WebdavDocumentVersion 实例。默认每月运行一次。

如需修改任务调度,请使用 jmix.webdav.document-versions-cleaning-cron 应用程序属性。