こんにちは、尿管結石を再発させてしまったid:c-terashimaです
数年ぶりに味わう痛みはやはり辛いですね。。皆さんも健康に気をつけて楽しいエンジニアライフを送っていきましょう
文章を書くにはWordを利用されている方が多く、契約書を作成するにも今使っているWordをそのまま使いたいというご要望をいただくことがあります
Wordを直接編集したら弊社ホームズクラウドへ登録される仕組みが可能か検討したところ、WebDavを使えばイケるのではないか?ということで早速試してみました
環境
次の環境で動作確認を行っています
- Java8
- SpringBoot
- SpringSecurity
- Word for Mac
TomcatでWebDavを起動させる
ホームズクラウドはSpringBootで動作しているため、SpringBoot(Tomcat)上でWebDavを動作させる必要があります
TomcatにWebdavServletクラスが用意されていますのでこちらを使っていきます
@SpringBootApplication public class Application extends SpringBootServletInitializer { public static main(String[] args) { SpringApplication.run(Application.class, args); } @Bean public TomcatServletWebServerFactory servletContainer() { final TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory(); factory.setDocumentRoot(new File(documentRoot)); return factory; } @Bean public ServletRegistrationBean servletRegistrationBean() { // WebDavエンドポイントの設定 ServletRegistrationBean bean = new ServletRegistrationBean(new WebdavServlet(), "/webdav/*"); bean.setName("WebDav"); bean.addInitParameter("debug", "1"); bean.addInitParameter("listings", "true"); bean.addInitParameter("readonly", "false"); return bean; } @Bean public StrictHttpFirewall httpFirewall() { StrictHttpFirewall firewall = new StrictHttpFirewall(); firewall.setAllowedHttpMethods(Arrays.asList( "HEAD", "DELETE", "POST", "GET", "OPTIONS", "PATCH", "PUT", "PROPFIND","PROPPATCH", "MKCOL", "COPY", "MOVE", "LOCK", "UNLOCK" )); return firewall; } }
servletContainer
メソッドでドキュメントルートをしており、Wordファイルが配置されるパスとなります。実際運用する場合は、クラウドストレージにファイルを格納することになります
servletRegistrationBean
メソッドでServletクラスの登録とエンドポイントを設定しています。ファイルアクセスする際に使われます
WebdavServletクラスにパラメータを設定する必要があります
- debug:debugログの出力を制御
- listings:ファイルリストの参照を制御。これをONにしないとファイル操作ができない
- readonly:ファイルの書き込みを可能にする
WebDavでは独自のHttpMethodを利用するためSpringSecurityを利用していると弾かれてしまうため、登録します
メソッド | 機能 |
---|---|
PROPFIND | プロパティの取得 |
PROPPATCH | プロパティの変更 |
MKCOL | コレクションの作成 |
COPY | コレクションを含むリソースおよびプロパティの複製 |
MOVE | コレクションを含むリソースの移動 |
LOCK | コレクションを含むリソースのロック |
UNLOCK | コレクションを含むリソースのロック解除 |
OPTIONS | 既存のメソッドと同じ |
GET | 既存のメソッドと同じ |
HEAD | 既存のメソッドと同じ |
POST | 既存のメソッドと同じ |
PUT | リソースの作成 |
DELETE | コレクションおよびそのコレクションに含まれるリソースの削除 |
サーバ側の設定はこれだけです
ブラウザからアクセス
Office URI スキーマでブラウザからWebDavにアクセスを行いWordを開きます
Office URI スキーマとは
このドキュメントでは、オフィス生産性向上アプリケーション用の Uniform Resource Identifier (URI) の形式を定義します。このスキームは、Microsoft Office 2010 Service Pack 2 以降でサポートされており、これには Microsoft Office 2013 for Windows および Microsoft SharePoint 2013 などの製品が含まれます。また、Office for iPhone、Office for iPad、および Office for Mac 2011 でもサポートされます。
Office URI スキーマ | Microsoft Docsより引用
URIスキーマの仕様に則って ms-word:ofe|u|http://localhost:8080/webdav/test.docx
にアクセスするとWordを起動するかを問うダイアログが表示されますので Microsoft Word.app を開く
をクリックしてください。WebDavに公開されているWordが開きます
そのまま、編集し保存を行うと自動でサーバにアップロードされます
まとめ
SpringBoot(Tomcat)でWebDavは結構かんたんに実装することができました
ただ、最低限の動きを検証しただけなのでセキュリティなどには十分注意してください
ホームズクラウドにWordの直編集機能が組み込まれるのは近い!?
Holmesはエンジニア・デザイナーを募集しています!
興味がある方はこちらからご連絡ください!