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
のAPIehcache-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 JARspring.jar
-Spring Framework JARstruts2-core-2.0.8.jar
--Struts2コアJARxwork-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フィルターを配置する必要があります。