0

資産管理用のシステムを作っています。システムには、管理者、サブ管理者、限定ユーザーの 3 つのカテゴリのユーザーがいます。管理者は何でもできます。サブ管理者はデータの検証のみを担当し、限定ユーザーは完成したばかりのデータしか見ることができません。 / データを見る

データベースでは、number.Administrator = 0、SubAdmin = 1、および制限付きユーザー = 2 で特徴付けられるアクセス権。

システムに入るには、各ユーザーがログインする必要があり、ログイン時にアクセス権がセッションに保存されます。問題は、サーブレット ファイル (.xhtml) でセッションを確認するにはどうすればよいですか? たとえば、DataTable にデータがあります。「編集」「削除」「確認」というメニューがあります。管理者がログオンしている場合、メニュー「編集、削除」が表の行に表示され、サブ管理者がログオンしている場合、メニュー「検証」のみが表示され、制限されたユーザーがログオンしている場合、メニューは表示されません。

ファイルで servletnya セッションを確認する必要がありますか、それとも別の方法がありますか? どうやって ?

どうもありがとう..

4

2 に答える 2

1

まず、XHTML ファイルはサーブレットファイルではありません。Faceletsファイルです。Facelets は、XML ベースのビュー テクノロジーです。

具体的な質問については、JSF コンポーネントのrendered属性で判断してください。ブール条件が評価された場合、falseJSF は単純にコンポーネントをレンダリングしません (また、送信時にコンポーネントを処理しないため、改ざんされたリクエストに対しても安全です)。

ログインしたユーザーが としてUserEL スコープで利用可能な javabean であり、 を受け取ってを返すメソッドを#{user}持っていると仮定すると、次のようにすることができます。hasRole()Stringboolean

<h:commandButton value="delete" rendered="#{user.hasRole('admin')}" />

isAdmin()を返すメソッドだけを持つなど、バリエーションがありますboolean

<h:commandButton value="delete" rendered="#{user.admin}" />

または、次をgetRoles()返すメソッドを持つCollection

<h:commandButton value="delete" rendered="#{user.roles.contains('admin')}" />

0必要に応じて、 string の代わりに整数を使用することもできますがadmin、それはあまり自己文書化されていません。

以下も参照してください。


ただし、基本的には自作の承認であることに注意してください。Java EE 組み込みコンテナー管理の認証および許可の使用を検討することもできます。HttpServletRequest#isUserInRole()その後、ユーザーを承認するために使用できます。User#hasRole()それは提案によく似ています:

<h:commandButton value="delete" rendered="#{request.isUserInRole('admin')}" />
于 2012-05-01T20:04:56.443 に答える
0

Web アプリケーションでSpring Securityを使用すると、特別なタグを使用して問題を簡単に解決できます。

<sec:authorize ifAllGranted="ADMINISTRATOR">
    <h:commandButton value="edit" />
    <h:commandButton value="delete" />
</sec:authorize>
<sec:authorize ifNotGranted="SUBADMIN">
    <h:commandButton value="verify" />
</sec:authorize>

これを行うには、ページの名前空間に追加するだけです:

xmlns:sec="http://www.springframework.org/security/tags"

そして、このライブラリをプロジェクトに接続します。

また、使用できる Spring Securityのその他の有益な利点についても学ぶことができます。

于 2012-05-01T20:25:23.720 に答える