サーブレットを使用して単純な WebApplication を構築しています。私は初心者ですが、この技術を最大限に学ぼうとしました。解せないものがあります。私のサーブレットの 1 つは便利な BalusC FileServlet です。
http://balusc.blogspot.mx/2007/07/fileservlet.html
GET 要求に応答して、必要なファイルをきれいに取得します。
この FileServlet を使用して、Dygraph の CSV ファイルを提供します
http://dygraphs.com/
ゲストと管理者の 2 種類のユーザーがいます。ゲストはグラフを表示できますが、CSV ファイルをダウンロードすることはできません。管理者は両方を実行できる必要があります。
fileServlet は URL パターンに次のように応答します: file/* (* はファイル名)。Dygraph は URL で指定されたファイルを読み取るため、非常に便利です。
この webapp 内に構築された loginServlet があり、ユーザーが Dygraph に指定された URL をコピーして貼り付けるだけで、fileservlet がファイルを提供するのを回避できるようにしたいと考えています。FileServlet はすでにセッションとそのセッションからのログユーザーを取得できますが、GET メソッドを呼び出したページを検出する方法がわかりません。ブラウザーのアドレス バーからではなく、JSP コード内から呼び出された場合にのみ、fileservlet がファイルを提供するようにします。
少し説明させてください:
つまり、ゲストユーザーとして、次のJavascriptコードはグラフを表示する必要があります(FileServletがファイルを提供します)
<div id="graphdiv2" style="width:640px; height:480px;">
<script type="text/javascript">
g2 = new Dygraph(
document.getElementById("graphdiv2"),
"${messages.rutacsv}", // path to CSV file
{
rollPeriod: 10,
showRoller: true
}
);
</script>
</div>
変数: "${messages.rutacsv}" は、次のようなサーブレットに置き換えられます。
「ファイル/2012-04-20_1.csv」
したがって、Dygraph はファイルを適切に読み込み、線をプロットします。
しかし、ユーザーが ContextName の後にこの URL をコピーペーストしてブロックしたことを FileServlet が検出できるようにして、Dygraph のみがファイルをダウンロードできるようにしたいと考えています。
たとえば、ユーザーがブラウザに次のように入力したとします。
http://localhost:8080/MyWebApp/file/2012-04-20_1.csv
ダウンロードできないはずです。管理者のみができる必要があります。
現在、FileServlet を実装して、別の URL パターンまたは POST メソッドで呼び出す必要があるので、単純なユーザーのコピーパスタが「origining-JSP」チェックを通過できないようにする必要があると考えています。
ところで、私は Struts2 を試してから戻ってきましたが、これはこのアプリケーションには複雑すぎます。シンプルなサーブレットと JSP を使用した開発の利便性と容易さのために、私はそれを放棄しました。