2017-07-16 8 views
0

私が解決しようとしている問題は、WebプロジェクトがTomcat 7上で実行されており、一般に公開されているJSPページだけでなく、公然とは意図されていないJSPページアクセス可能なこれらの「プライベート」のページがそうのような様々なサーブレットによって使用されます。RequestDispatcherでJSPにアクセスできるようにする#include only

response.setContentType(...); 
request.getRequestDispatcher("/private/example.jsp").include(request, response); 

私は民間のJSPページはRequestDispatchaer#include()によってアクセスできるようにしたいが、ないクライアントは、例えばに移動した場合/private/example.jsp

私はこれを処理しています方法は、今私は、サーブレットからのリクエスト属性を設定していますされています

request.setAttribute("okToAccess", true); 

は、次にJSPページに、私はそれが見つからない場合は空のドキュメントを返し、その属性を確認してください。これには2つの欠点があります:

  1. コードはボイラープレートで書き込みが面倒です。
  2. includeを介して送信されたサーブレットは、応答ステータス/ヘッダーを変更できないため、できません。 JSPから403または404を返送すると、呼び出し側サーブレットがエラー応答を発行するように、少し複雑なロジックを実装する必要があります。

私の質問は:まだそれらをinclude()で使用させながら、これらの「プライベート」のJSPへの直接アクセスをブロックするクリーンな方法はありますか?私はweb.xmlか何かに置くことができる何か?

答えて

1

WEB-INFに格納されているコンテンツは、Webコンテナから直接配信されません。プライベートJSPファイルをそのフォルダに配置して、サーブレットを介して要求を強制します。

+0

どのようにWEB-INFフォルダにコンパイルされますか? –

+0

すごい!私はそこに任意のものを置くことができるとは考えていませんでした。 –

+0

@TonyBenBrahim私はそれが動作すると思います。私は人々がそれ[ここ](https://coderanch.com/t/291403/java/access-jsp-WEB-INF-folder#1332177)に言及して参照してください。私は公式の仕様を見つけるのに十分な掘り下げをしなかった。 –

関連する問題