1時間でAcegiセキュリティ

Acegi Securityは、Javaエンタープライズ開発者の間で深刻な前向きな話題を生み出しているため、どのように機能するのか疑問に思われるかもしれません。この記事では、ShriKant Vashishthaが、AcegiSecurityの実践的な実装のすべてのステップについて説明します。最初に、JavaベースのWebアプリケーション用にフォームベースの認証および承認サービスをセットアップし、次に動的承認用にAcegi Securityをカスタマイズし、LDAPなどの独自の認証実装と統合します。

Acegi Securityは、Springフレームワークを使用して構築されたJavaエンタープライズアプリケーション向けの強力で柔軟なセキュリティソリューションです。Springベースの依存性注入により、Acegiは完全に邪魔にならない方法で簡単に構成および実装できます。これは、Springフレームワーク全体を実装したくないが、レガシーアプリケーションに効果的で再利用可能なセキュリティを必要としている組織にとっては朗報です。

この記事では、基本的な注文処理アプリケーションにAcegiSecurityを実装するための簡潔なジャンプスタートを提供します。アプリケーションの認証および承認サービスをセットアップし、それらのセキュリティ機能をフォームベースのWebページに実装します。例を実行すると、約1時間で任意のWebアプリケーションの基本的なフォームベースのセキュリティを設定できるようになります。

実装例の簡単な紹介に続いて、Acegiを使用してアプリケーションのセキュリティをカスタマイズする方法のいくつかについて学びます。ユーザーの役割をURLにマップするデータベースに基づいて動的な役割ベースの承認を設定する方法を説明します。最後に、既存の独自の認証実装と統合できるカスタムAcegiSecurity認証実装を作成する方法を説明します。

環境設定

Springベースのアプリケーションだけでなく、幅広い実装へのAcegiの適用性を示したかったのです。プレゼンテーション層にJavaServerPagesを、WebレイアウトにSiteMeshを使用して、JEE5を使用してサンプルアプリケーションを構築しました。アプリケーションはStruts2を使用して同じように簡単に構築でき、Struts 2インフラストラクチャは実装されていませんが、ソースコードにすでに配置されています。Springの依存性注入を使用して、アプリケーションにAcegiセキュリティを実装しました。アプリケーションのソースコードをダウンロードするには、「リソース」セクションを参照してください。次の手順に従って、アプリケーション環境をセットアップします。

手順1.Acegi、Spring 2、およびSiteMeshをダウンロードします(ダウンロードリンクについては、「参考文献」を参照してください)。

手順2.Javaプロジェクトで次のフォルダ構造を作成します。

src -Javaソースコードが含まれています

test -テストケースが含まれています

config -クラスパス内にある必要があるプロパティ/ XML構成ファイル

web -Webアプリケーションが含まれています

|

decorators -SiteMeshデコレータが含まれています

images -画像が含まれている場合

scripts -JavaScriptファイル

styles -カスケードスタイルシート(CSS)

WEB-INF

|

jsp -JavaServer Pagesファイル(JSP)が含まれています

lib -JARが含まれています

手順3.次のJARファイルをWEB-INF / libディレクトリにコピーします。

  • acegi-security-1.0.5.jar -Acegiセキュリティシステムの主なクラス
  • cglib-2.1.3.jar -Springで使用されるコード生成ライブラリ
  • commons-codec-1.3.jar -Base64、Hex、Phonetic、URLなどのエンコーダーとデコーダー
  • commons-lang-2.1.jar-のためのヘルパーユーティリティjava.langのAPI
  • ehcache-1.2.3.jar -基本的なキャッシュの目的で使用されます
  • freemarker-2.3.8.jar -Strutsの実装で使用されます
  • jstl.jar, standard.jar -JavaServer Pages標準タグライブラリ(JSTL)タグライブラリ
  • log4j-1.2.13.jar -ロギング用
  • ognl-2.6.11.jar -Struts実装で使用されるOGNLライブラリ
  • sitemesh-2.3.jar -SiteMesh JAR
  • spring.jar -Spring Framework JAR
  • struts2-core-2.0.8.jar --Struts2コアJAR
  • xwork-2.0.3.jar -Strutsが使用

web.xmlへの変更

Acegi Securityはサーブレットフィルターインターセプターの概念に基づいているため、リスト1に示すように、FilterToBeanProxyフィルターのエントリをアプリケーションのweb.xmlデプロイメント記述子に追加する必要があります。

リスト1.web.xmlへのサーブレットフィルターの追加

  AcegiTraining  contextConfigLocation /WEB-INF/applicationContext*.xml   Acegi Filter Chain Proxy  org.acegisecurity.util.FilterToBeanProxy   targetClass  org.acegisecurity.util.FilterChainProxy    ... ...  Acegi Filter Chain Proxy /j_acegi_security_check   Acegi Filter Chain Proxy /j_acegi_logout   Acegi Filter Chain Proxy *.action   Acegi Filter Chain Proxy *.jsp  ... 

FilterToBeanProxy初期化パラメータが必要targetClassです。このtargetClassパラメーターは、アプリケーションコンテキストで指定されたクラスの最初のオブジェクトを検索します。リスト1の構成では、そのクラスはorg.acegisecurity.util.FilterChainProxyです。filterChainProxyリスト2に示すように、アプリケーションコンテキストで関連するBeanオブジェクトはです。

リスト2。 filterChainProxy


    
     class="org.acegisecurity.util.FilterChainProxy"> ... 
    

リスト1は、Acegiフィルターの複数のフィルターマッピングを定義していることに注意してください。代わりに、リスト3に示すように、より一般的なフィルターマッピングを使用することをやめることができます。

リスト3.一般的なフィルターマッピング

 Acegi Filter Chain Proxy /* 

ただし、リスト3のフィルターマッピングを使用すると、すべてのURLがAcegiフィルターによってインターセプトされます。また、フィルターは静的リソース(JavaScript、CSS、HTML、および画像)の承認の詳細も要求するようになりましたが、これは保護したくない場合があります。特定のURLパターンを使用することで、このトラップを回避できます。

サーブレットフィルタを配置するときは、順序が不可欠です。サンプルアプリケーションはAcegi、JSP、およびSiteMeshのフィルターを使用するため、最初にAcegiフィルターを配置し、次にそれぞれJSPおよびSiteMeshフィルターを配置する必要があります。