1

最新のWebアプリケーションを保護する方法を決定しようとしています。私はJavaEE6テクノロジスタックに比較的慣れていませんが、セキュリティを利用しないペットプロジェクトをいくつか行ったので、そのまま使用できるJavaEE6セキュリティを使用して何が可能かについての一般的なガイダンスを探しています。

宣言型セキュリティを使用すると、リソースにアクセスしようとしているユーザーに割り当てられている役割に基づいてリソースを保護できることを理解しています。したがって、たとえば、ユーザーが特定のURLでページを要求すると、Java EEサーバーはユーザーの資格情報をチェックして、ユーザーがそのページへのアクセスを許可されているかどうかを確認します。これは、認証されたユーザーのみがアクセスするリソースにとっては完全に理にかなっています。良い例としては、管理ページ、ユーザーアカウント設定ページ、制限されたコンテンツ領域などがあります。

Webサイトを安全な領域と安全でない領域に分割している限り、それは問題なく機能し、質問はありません。しかし、宣言型セキュリティのためにユーザーの認証レベルに基づいて異なる動作をしたいリソースがある状況にどのように対処しますか。

たとえば、ユーザーが認証されていないユーザーの場合、ログインプロンプトで1つのビューを表示するホームページがあるかもしれませんが、認証されたユーザーが同じリソースにアクセスすると、アカウント管理リンクなどを備えたある種のコントロールパネルが表示されます。ログインプロンプトの代わりに。

これは、最新のJava EE 6アプリケーションでどのように実現されますか?宣言型セキュリティは、非常に「オールオアナッシング」であるため、これを実現するのに十分な表現力を備えていないようです。プログラムによるセキュリティについて少し読んだことがありますが、すべてのガイドがサーブレットについて説明しており、最新のWebアプリケーションでは、生のサーブレットではなく、JSFが進むべき道であると思います。ユーザーの認証ステータスに依存するこの混合コンテンツを使用してWebアプリケーションを保護する場合、非常にエラーが発生しやすく、非常に面倒なので、Webアプリ全体にセキュリティコードをスパムすることはありません。

上記の要件を考慮して、どのソリューションをお勧めしますか?私は一歩一歩を探しているのではなく、正しい方向に進むためのいくつかの役立つ指針を探しています。「これがあなたが使えるものです」と「これがあなたの目標を達成する方法です」の両方が役に立ちます!

最後に、SpringスイートをこのWebアプリにロードしないようにします。私はJavaEE6コンテナテクノロジを可能な限り使用するのが好きですが、SpringマネージドBeanとJavaEEコンテナマネージドBeanを相互のコンテキストで使用できるようにする際に問題があると聞きました。

4

1 に答える 1

1

さて、あなたは読むべきです:Javaeeチュートリアルのセキュリティの章。

簡単に言うと、サーブレットまたはEJBのいずれかで、次のことを行う必要があります。

  • 関連するセキュリティロールを宣言します。@DeclareRoles("javaee6user")
  • サーブレットのいずれか
    • サーブレット全体に@ServletSecurity(@HttpConstraint(rolesAllowed = {"javaee6user"}))を使用します(宣言型セキュリティ)
    • request.isUserInRole("javaee6user")サーブレットのメソッドでは、「古い」サーブレットの場合と同じようにチェックします(プログラムによるセキュリティ)
  • EJBのいずれかで
    • メソッド全体で許可されている役割を@RolesAllowed("javaee6user") (宣言型セキュリティ)で宣言する
    • '古い'EJB (プログラムによるセキュリティ)で行ったように、Beanコンテキストを注入し、メソッド内@Resource SessionContext ctx;で呼び出します。ctx.isCallerInRole("javaee6user")
于 2012-12-10T16:19:33.080 に答える