読者です 読者をやめる 読者になる 読者になる

Wicket サーブレットコンテキストに置いたファイル参照

Wicket で、サーブレットコンテキストに置いたファイルを、HTTPリクエストで動作する WebPage から参照するのに、
ResourceReference で参照するであろう。

JavaScriptResourceReference や、CssResourceReference など、参照するものがほぼ、決まっている。
だからこれらの明示的なクラスがある。


問題は、任意の形式を WebPage クラスと同じ階層に置いたファイルを参照できるようにするか?である。
方法の前に、抑えておきたいのは、

 org.apache.wicket.markup.html.SecurePackageResourceGuard

という、org.apache.wicket.markup.html.PackageResourceGuard implements IPackageResourceGuard

のサブクラスの中で、ファイルの拡張子のパターンで、アクセスが制限(Guard)されてることだ。

SecurePackageResourceGuard の中で許可されてるファイル拡張子パターンは、以下のとおり。

 *.js
 *.css
 *.png
 *.jpg
 *.jpeg
 *.gif
 *.ico
 *.cur
 *.html
 *.txt
 *.swf
 *.bmp
 *.svg
 *.eot
 *.ttf
 *.woff

XMLやCSVなどは含まれていないのである。


含まれていないファイル拡張子は、許可をする設定が必要で WebApplication クラスの init() で実行する。


SecurePackageResourceGuard を生成して、addPattern メソッドで追加したら、PackageResourceGuard として登録をし直すのである。

CSV形式を設定する場合、、、

public class MyApplication extends WebApplication{
   @Override
   protected void init(){
      
      SecurePackageResourceGuard mySecurePackageResourceGuard = new SecurePackageResourceGuard();
      mySecurePackageResourceGuard.addPattern("+*.csv");
      getResourceSettings().setPackageResourceGuard(mySecurePackageResourceGuard);
      
   }
}

ということをした上で、WebPage クラスでは、

  new PackageResourceReference(SampleWebPage.class, "sample.csv")

と、Wicket馴染みの org.apache.wicket.request.resource.IResource
として参照→振る舞いの処理ができる。

注意:
SecurePackageResourceGuard addPattern 実行で渡すファイルパターンは、
 *.csv+*.csv
のように、'+' で始まらないと Exception が発生する。