わたしの好きなプラグインシリーズその2 Grails Acegiプラグイン
(注意)良く分かってないまま勢いで書きました。コメントや誤り指摘がありましたらお願い致します。
Grails AcegiSecurityプラグインは、Springセキュリティをラッピングして簡易に利用可能にしたGrailsのプラグインです。Springセキュリティとは、以前「Acegi Security」と呼ばれていた、Spring Framework上で利用可能な認証認可に関するフレームワークです。Springセキュリティは、Spring FrameworkのDIの機能を駆使し、非常にカスタマイズ性が高く作られています。カスタマイズ性が高い理由は、アプリケーションにおけるセキュリティに関する要件がもともと、柔軟であるからですね。例えば、
- 認証のためのアカウント・パスワード情報をDBに置くかLDAPか
- URLベースで認可するか、機能ごとか
- 機能の集合としてロールを定義してURLと結び付けるとか
- 携帯の端末IDで認証するとか
など、非常にさまざまな側面があります。わたしのような凡人だと、えーいこんなの案件ごとにハードコーディングしてまえ!と思うのですが、Spring セキュリティはあきらめない。例えば以下のような処理に定型化して、各ステップを差し替え可能にしてるんです。
上の図は(IBMの記事「Acegi を使って Java アプリケーションをセキュアにする、第 1 回: アーキテクチャーの概要とセキュリティー・フィルター」より引用)。
さてご想像の通り、上のようなフレームワークを使いこなすのは簡単なことではございません。機能一覧を一通り理解するのですら、相当かかります。汎用性・柔軟性が高く、機能が多いことの代償だと言えましょう。
ただ、いったん理解すれば、Webアプリ開発が相当楽になることも想像にかたくありません。問題はその初期コストです。
GrailsのAcegi Securityプラグインは、Springセキュリティが可能にする典型的なコードの一通りのことをひととおり準備してくれます。例えば、アカウント管理をDB上に置いて管理画面で管理するようなところは、デフォルトで可能です(もちろんGrailsなのでscaffoldでCRUD編集可能)。加えて、ある程度の設定はDSLで可能としています。(まあこの設定が容易とはいえませんですが)。カスタマイズはなかなか大変ですが、汎用的なものをベースとして簡易なものを実現しているので、筋はよいわけです。
このような構図は、Grailsの各所でしばし見られます。生産性を高め、汎用的にしていけば行くほど、フレームワークは大規模化・難解なものになっていきます。だからといって単機能なものに立ち返れば良いかというと、それで結局機能が足りなくて作り足しすることになるなら、出口のないループです。
Grailsは、プラグイン・DSLにより、このような「機能地獄のスパイラル」から脱出しうる一つの希望を示してくれていると思っています。
ちなみにわたしはまだ全然Acegi Securityもプラグインも使い込んでおらず理解していません。あしからず・・