0

Java サーブレットを使用した標準の GAE アプリがあります。システム全体にユーザー ロール機能を実装したいと考えています。この目的のために、データベースからユーザー ロールを取得し、それをセッションに保存して、すべてのサーブレットがこのデータにアクセスできるようにします。私はそれに関するいくつかの記事を読みましたが、それを行う基本的な方法は、フィルターを使用して HttpSession に必要なデータを入力することです。ただし、この場合、すべてのサーブレットで同じ方法で HttpSession からデータを取得する必要があるため、コードが重複します。この問題の明らかな解決策は、HttpServlet クラスから派生させ、HttpSession を操作するために必要なメソッド (例: protected Role getUserRole()) を備えた独自のサーブレットを作成することです。これにより、フィルターの使用が無意味になります。この場合、フィルターを使用する理由はありますか?

4

2 に答える 2

0

にマップされる最上位のフィルターが必要/*です。このフィルターは、セッションに存在しない場合、データベースからロールを取得します。HttpServletRequest次に、ラッパー オーバーライドメソッドを拡張して作成しisUserInRole()、そのロールが好きなようにフェッチされるようにします。このオブジェクトのオブジェクトを作成し、フィルターrequestで使用します。chain.doFilter

したがって、すべてのサーブレットはrequest.isUserInRole()ロールを確認するために呼び出すことができます

于 2012-12-21T23:22:14.587 に答える
0

HttpServlet から直接継承するメイン サーブレットを使用できます。このサーブレットは、保護された Role getUserRole()を介して HttpSession からユーザー ロールを取得する方法を認識しています。アプリケーション内の他のすべてのサーブレットは、そのメイン サーブレットをサブクラス化して、共通の機能を使用できるようにする必要があります。

サーブレット フィルターは、他のサーブレットが呼び出される前に呼び出されます。フィルターの主な目的は、要求/応答を装飾してから、さらに処理するためにサーブレットに渡すことです。フィルター内からデータベースにアクセスし、それに応じて HttpSession を設定することを選択できます。これにより、各サーブレットは後で HttpSession からその情報を取得する方法を認識します。

ここでお勧めするもう 1 つのオプションは、リクエストを処理する最初のサーブレット内から HttpSession にユーザー ロールを設定することです (メイン サーブレットの別の一般的な方法でそれを行うこともできます。たとえば、protected void populateUserRole(HttpSession httpSession))。

乾杯;

于 2012-12-21T23:30:43.363 に答える