web-dev-qa-db-ja.com

データベース内のユーザーとの認証/承認を処理するにはどうすればよいですか?

現在、JSF 2.0、Tomcat 7、MongoDBを使用してWebプロジェクトに取り組んでいます。データベースでユーザーとのセッション管理と認証/承認をどのように処理するかについて大きな質問があります。

必要な構造は次のとおりです。ログインしたユーザーのみがイベントを作成でき、作成されたイベントをすべてのユーザーが表示できます。

  • create.xhtml->ログインしたユーザーのみ。
  • events.xhtml->すべての人に公開します。

私が計画している基本的な構造は:

  • ページにログインユーザーが必要かどうかを確認します(例:create.xhtml
  • はいの場合、ユーザーがログインしているかどうかを確認します
  • ユーザーがログインしていない場合は、login.xhtml
  • ログインに成功したら、リクエストされたページに戻ってください
  • ユーザーがログアウトボタンをクリックしない限り、「ユーザーはログインしています」情報を保持します。 (私は推測します@SessionScopedが出場します)

質問は:

  1. これを行う簡単な方法は何ですか?
  2. どこで@SessionScopedアノテーション? Create.JavaまたはLoginManager.Java
  3. 春のセキュリティは私の問題にとって一種複雑に見えますが、本当に必要ですか?はいの場合、実装がJSF 2.0およびMongo DBとどのように連携するかを少し説明できますか?
29
whizzkid

いくつかのオプションがあります。どちらを選択するかは完全にあなた次第です。具体的な長所と短所を客観的に比較するだけで、自分の状況に適合します。


1. Java EE提供 コンテナ管理認証 を使用)

_<security-constraint>_を_web.xml_で宣言するだけで、servletcontainerで設定されたセキュリティレルムを参照します。あなたはあなたのwebappのためにログインやロールのためにチェックされるべきURLパターンを指定することができます、例えば。 _/secured/*_、_/app/*_、_/private/*_など.

Java EE 8の前は、残念ながら、サーブレットコンテナ固有の方法で実際のセキュリティを設定する必要があります。通常、サーブレットコンテナ固有のドキュメントで説明されています。Tomcat8の場合、 レルムHOW-TO 。たとえば、ユーザー/ロールテーブルに基づくデータベースベースのレルムについては、「JDBCRealm」で説明しています。

Java EE 8)なので、 JSR-375 に基づく標準APIがついに登場します。

利点:

  • セットアップと使用が比較的迅速で簡単です。
  • Java EE 8以降、堅牢で柔軟な標準APIがついに登場しました。

短所:

  • Java EE 8以前は、レルム構成はコンテナー固有です。Java EE 8では、新しい JSR-375セキュリティーSpec[〜#〜] jaspic [〜#〜] の助けを借りてそれを解決する必要があります。
  • Java EE 8、の前は、きめ細かな制御はありません。
  • Java EE 8の前は、それは非常に質素です;「私を覚えている」ことはなく、エラー処理が不十分で、許可ベースの制限がありません。

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


2. Homegrow a サーブレットフィルター

これにより、さらに細かい制御が可能になりますが、すべてのコードを自分で作成する必要があり、潜在的なセキュリティホールを回避するためにこのようなフィルターを実装する方法を本当に理解/理解する必要があります。 JSF側では、たとえば、ログインしたユーザーをsessionMap.put("user", user)によってセッション属性として配置し、session.getAttribute("user")nullでないかどうかをフィルターでチェックできます。

利点:

  • きめの細かい制御。
  • 完全にコンテナに依存しません。

短所:

  • ホイールの再発明;新機能には多くのコードが必要です。
  • まず、コードが100%堅牢かどうかはわかりません。

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


3.サードパーティのフレームワークを採用する

たとえば、 Apache ShiroSpring Security などです。これにより、通常、標準のコンテナー管理認証よりもはるかに詳細な構成オプションであり、ログインページと一部の(XML)構成を想定しているため、このためのコードを自分で作成する必要はありません。

利点:

  • きめの細かい制御。
  • 完全にコンテナに依存しません。
  • ホイールの再発明はありません。最小限の独自コード。
  • 多くのユーザーによって徹底的に開発およびテストされているため、おそらく100%堅牢です。

短所:

  • いくつかの学習曲線。

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

58
BalusC