宮川 寧夫
Webアプリケーションフレームワークは、文字通り、Webアプリケーション開発の枠組みを与えるものであり、そのまま動作環境となる。その備える機能の程度には差がある。CMS(Contents Management System)として機能するものもある。また、最近のフレームワークとしての特徴として、REST(Representational State Transfer )[1]と呼ばれる設計方針や、MVCモデルをサポートしようとしているものがある。MVCモデルとは、コンポーネントの役割を「Model」、「View」および「Controller」の3つに分けてアプリケーションを設計手法である。
数あるWebアプリケーションフレームワークの中から、今回、Apache Shiro [2](以下、Shiro)というオープンソースWeb アプリケーションフレームワークを今期の話題として採りあげる。その理由は、Shiroが今期、2010年9月にASF(Apache Software Foundation)におけるトップレベルプロジェクトに昇格したことにある。その後、11 月3 日にはバージョン1.1.0リリースされた。このShiroは、本人認証、リソースへのアクセス認可、暗号技術的処理等のセキュリティ機能を請け負うことに特化しており、RESTの設計方針も採用しているが、MVCモデルは採用していない。
Shiroプロジェクトの発足当時の名前は、今日とは違い、2004年時点ではJSecurityというプロジェクトであった。これは、Sun (現Oracle)純正のJAAS (Java Authentication and Authorization Service )というライブラリの難点であった使い難さを解消するために、使い易いインタフェイスとなるように薄皮を被せたAPI ライブラリのようなものであった。JSecurity プロジェクトは、その後、ASF(Apache Software Foundation)に加わった。ASFにおいては、トップレベルプロジェクトに育成されるインキュベータープログラム(Incubator Program)に応募して採択された。JSecurityは、その後、いったんKiと改名されたが、すぐに再度、Shiroと改名された。
そして、上述のようにShiro のバージョン1.0 が2010年7月にリリースされ、同年9月にはASFにおけるトップレベルプロジェクトに昇格した。
Shiro内のセキュリティマネージャが管理する機能には、次の4つがある。
図:Shiroのセキュリティ機能
(出典:http://shiro.apache.org/architecture.html)
Shiroは、今日的なRESTの設計方針に対応していると共に、下記の特徴をもつと主張されている[3]。これらの中からも読み取ることができるように、Webアプリケーションの形態とならないスタンドアロンのシステムの開発も行うことができるフレームワークとなっている。
(1) 理解し易いJava Security API
卑近なJava開発環境にShiro以外にはDependency MangerとしてMavenもしくはIvyを追加的にインストールする必要がある。
従来のAPIライブラリを呼び出すようにShiroを使って開発することができるが、今日では、親和性のある他のアプリケーションフレームワークで開発されたアプリケーションをShiroに対応させるような使い方もできるようである。本稿では、後者の用法に着目する。具体的には、「Spring Application Framework(以下、Spring)」[6]で開発されたアプリケーションや、Grails [7]で開発されたWebアプリケーションがShiroに統合できるようになっている。Shiro には「HTTP フィルタ」と呼ばれる機能が用意されており、これを利用すると、Shiroに含まれているアプリケーションのセキュリティ機能を利用できるようになる。
統合における連携は、javaサーブレットが利用するweb.xmlファイルを介して行われる。web.xmlファイルは、「サーブレットデプロイメントデスクリプター(Servlet deployment descriptor:配備記述子)と呼ばれ、JavaのWebアプリケーションの設定を書くファイルである。Shiroが他のフレームワークと統合できる条件は、Shiroとのインタフェイスがこのファイルに集約されていることであり、依存関係を極めて少なくすることができている要因でもある。SpringやGrailsにはweb.xmlを適宜、編集・更新する機能があり、Shiroに制御を移す部分が記述される。
web.xmlファイルにフィルタが追記された設定のサンプルを掲げる。
<!-- The filter-name matches name of a 'shiroFilter' bean inside
applicationContext.xml -->
<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-cla
ss>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
...
<!-- Make sure any request you want accessible to Shiro is filtered. /* catches
all -->
<!-- requests. Usually this filter mapping is defined first (before all others)
to -->
<!-- ensure that Shiro works in subsequent filters in the filter chain:
-->
<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
|
Shiroは、本人認証機能やリソースへのアクセス認可等のセキュリティ機能に特化したフレームワークであり、Webアプリケーションのみならず、スタンドアロンシステムも開発できる。Shiroについて注目されるのは、従来のAPIライブラリを呼び出すような開発にも利用できると共に、依存関係が少ない利点を活かして他のアプリケーションフレームワークで開発されたアプリケーションに「HTTPフィルタ」を介してセキュリティ機能を統合するような開発にも活用することができるようになったことにある。
以上
| [1] | Roy Thomas Fielding, `CHAPTER 5 Representational State Transfer (REST)’ “Architectural Styles and the Design of Network-based Software Architectures” (2000) http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm |
| [2] | APACHE SHIRO http://shiro.apache.org/ |
| [3] | `Apache Shiro Features Overview’ http://shiro.apache.org/features.html |
| [4] | Ehcache - The Most Widely Used Java Cache http://ehcache.org/ |
| [5] | Quartz - Enterprise Job Scheduler http://www.quartz-scheduler.org/ |
| [6] | sprigngsource community http://www.springsource.org/ |
| [7] | GRAILS http://grails.org/ |
|
Bruce Phillips, An Introduction to Shiro (formerly JSecurity) A Beginner’s Tutorial - Part1 http://www.brucephillips.name/blog/index.cfm/2009/4/5/An-Introduction-to-Ki-formerly-JSecurity--A-Beginners--Tutorial-Part-1 - Part2 http://www.brucephillips.name/blog/index.cfm/2009/4/5/An-Introduction-to-Ki-formerly-JSecurity--A-Beginners--Tutorial-Part-2 |
|
| IBM developerWorks Japan,「Apache Shiroの紹介」 http://www.ibm.com/developerworks/jp/web/library/wa-apacheshiro/index.html |