現在、JSF 2.0、Tomcat 7、MongoDBを使用してWebプロジェクトに取り組んでいます。データベースでユーザーとのセッション管理と認証/承認をどのように処理するかについて大きな質問があります。
必要な構造は次のとおりです。ログインしたユーザーのみがイベントを作成でき、作成されたイベントをすべてのユーザーが表示できます。
create.xhtml
->ログインしたユーザーのみ。events.xhtml
->すべての人に公開します。私が計画している基本的な構造は:
create.xhtml
)login.xhtml
@SessionScoped
が出場します)質問は:
@SessionScoped
アノテーション? Create.Java
またはLoginManager.Java
?いくつかのオプションがあります。どちらを選択するかは完全にあなた次第です。具体的な長所と短所を客観的に比較するだけで、自分の状況に適合します。
_<security-constraint>
_を_web.xml
_で宣言するだけで、servletcontainerで設定されたセキュリティレルムを参照します。あなたはあなたのwebappのためにログインやロールのためにチェックされるべきURLパターンを指定することができます、例えば。 _/secured/*
_、_/app/*
_、_/private/*
_など.
Java EE 8の前は、残念ながら、サーブレットコンテナ固有の方法で実際のセキュリティを設定する必要があります。通常、サーブレットコンテナ固有のドキュメントで説明されています。Tomcat8の場合、 レルムHOW-TO 。たとえば、ユーザー/ロールテーブルに基づくデータベースベースのレルムについては、「JDBCRealm」で説明しています。
Java EE 8)なので、 JSR-375 に基づく標準APIがついに登場します。
これにより、さらに細かい制御が可能になりますが、すべてのコードを自分で作成する必要があり、潜在的なセキュリティホールを回避するためにこのようなフィルターを実装する方法を本当に理解/理解する必要があります。 JSF側では、たとえば、ログインしたユーザーをsessionMap.put("user", user)
によってセッション属性として配置し、session.getAttribute("user")
がnull
でないかどうかをフィルターでチェックできます。
たとえば、 Apache Shiro 、 Spring Security などです。これにより、通常、標準のコンテナー管理認証よりもはるかに詳細な構成オプションであり、ログインページと一部の(XML)構成を想定しているため、このためのコードを自分で作成する必要はありません。