//S2Milla
#contents

*S2AnA [#acac8274]
主にJ2EEコンテナによって提供されているAuthentication(認証)とAuthorization(承認)の機能を、Seasarから簡単に使用することを目的としたプロジェクトです。
S2AnAの"AnA"は、Authentication and Authorizationの略です。

**概要 [#c8d78071]
S2AnAは大きく2つ、認証系(authentication)と承認系(authorization)に分かれます。

- 認証(authentication)とは、システムにアクセスしているユーザ(正しくはPrincipalといいます)が誰であるかの識別と特定を行う機能です。
- 承認(authorization)とは、ユーザが特定の対象物に対してアクセスする権限があるかどうかを調べ、アクセスを許可あるいは拒否する機能です。


(注) 認証された情報は正しくはPrincipalですが、このドキュメントでは簡単に理解していただくためにPrincipalのことをユーザと書いております。実際のPrincipalは人間だけでなく組織や機械を指し示すこともあります。


**認証系機能 [#j31a5dfd]

***AuthenticationContextインターフェイス [#m072236b]

認証系と承認系を結ぶためのインターフェイスです。コンテナや個々のアプリケーションで認証した情報に対して、S2AnAはこのインターフェイスを通じてアクセスします。
実装する場合には、以下のメソッドを実装する必要があります。

- getUserPrincipal : Principal
- isAuthenticated : boolean
- isUserInRole(String roleName) : boolean


なお、AuthenticationContextの簡易実装としてRequestDelegatingAuthenticationContextを提供しています。
***RequestDelegatingAuthenticationContext [#c60fa485]
HttpServletRequestを介してWebApplicationのRealm認証情報へのアクセスを行うコンポーネントです。使用するにあたっては、web.xmlにs2filterが設定されていることが前提条件となります。

diconファイルへの記述例
    <component
        name="authenticationContext"
        class="org.seasar.security.authentication.servlet.RequestDelegatingAuthenticationContext"
        instance="request"
    />


なお、WebApplicationのRealm認証情報へのアクセスを行う実装はs2-ana-provider-webcontainerとしてパッケージングされています。
s2-ana-provider-webcontainerを使用する際には、s2ana-provider-webcontainer.diconをs2ana.diconファイルにincludeするようにしてください。

s2ana.diconファイルへの記述例
    <include path="s2ana-provider-webcontainer.dicon" />


**承認系機能 [#yb5ba344]

現在3つのinterceptorをS2AnAで用意しています
- AuthenticatedAccessOnlyInterceptor
- AllowInterceptor
- DenyInterceptor

これら承認系のinterceptorに対して、AuthenticationContextがインジェクトされます。


***AuthenticatedAccessOnlyInterceptor [#r9bef7f1]
「認証されているかどうか」をチェックするinterceptorです。インジェクトされているAuthenticationContextのisAuthenticatedメソッドを使用して、既に認証が行われているかどうかを検査します。

AuthenticationContext#isAuthenticatedがfalseを返す場合にはSNotAuthenticatedExceptionを投げます。
この例外をキャッチしてログイン画面等に遷移させるのが典型的な使用例となります。


diconファイルへの記述例
 <component name="authenticatedAccessOnly"
    class="org.seasar.security.authorization.AuthenticatedAccessOnlyInterceptor"/>



***AllowInterceptor,DenyInterceptor [#i3d2294b]
インジェクトされているAuthenticationContextのisUserInRoleメソッドを使用して、アクセスしているユーザが指定されたロールに属しているかどうかを検査します。
- AllowInterceptorは指定されたロールに属しているユーザのアクセスのみを許可します
- DenyInterceptorは指定されたロールに属しているユーザのアクセスを拒否します

AllowInterceptorにアクセスが許可されなかったか、またはDenyInterceptorにアクセスが拒否された場合には、SAccessDeniedExceptionが投げられます。


FQCNを除いては、AllowInterceptor,DenyInterceptorのdiconファイルへの記述方法は共通となります。
AllowInterceptor,DenyInterceptorのdiconファイルへの記述方法は(FQCNを除いては)共通です。

記述例:単一のロールを指定する
 <component class="org.seasar.security.authorization.AllowInterceptor">
   <arg>"roleA"</arg>
 </component>

記述例:複数のロールを指定する
 <component class="org.seasar.security.authorization.AllowInterceptor">
   <arg>{"roleA","roleB"}</arg>
 </component>

記述例:セッターインジェクションで設定を行う
 <component class="org.seasar.security.authorization.AllowInterceptor">
   <initMethod name="addRoleName">
     <arg>"roleA"</arg>
   </initMethod>
 </component>

記述例:メソッドインジェクションで設定を行う
 <component class="org.seasar.security.authorization.AllowInterceptor">
   <initMethod>#self.addRoleName("roleA")</initMethod>
   <initMethod>#self.addRoleName("roleB")</initMethod>
   <initMethod>#self.addRoleName("roleC")</initMethod>
   <initMethod>#self.addRoleName("roleD")</initMethod>
 </component>



**開発者 [#pdfc7270]
t-wada[http://d.hatena.ne.jp/t-wada/]と申します。よろしくお願いします。


**開発情報 [#j12d3987]
RFPは、こちら[http://d.hatena.ne.jp/koichik/20041122#1101145610]

***CVSリポジトリ [#y01a93ab]
CVS上で開発を始めました。
- ホストは[cvs.sourceforge.jp]
- リポジトリは[/cvsroot/seasar]
- モジュールは[sandbox/s2-ana]
となります。


Web上でご覧になりたい方は
http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/seasar/sandbox/s2-ana/
からどうぞ。


**ダウンロード [#kfe0aad5]

***Mavenリポジトリ [#gefd69f0]
mavenリポジトリにて先行リリースを始めました。

mavenをお使いになる方は、
- maven.repo.remoteに[http://seasar.sourceforge.jp/maven/]を追加し、
- groupIdに[seasar]
- artifactIdに[s2-ana]

を指定することでダウンロードしていただくことが可能です。


記述例:
    <dependency>
      <groupId>seasar</groupId>
      <artifactId>s2-ana</artifactId>
      <version>0.1.5</version>
      <type>jar</type>
    </dependency>


***依存ライブラリについて [#tae95335]
S2AnAはS2コアとS2AOPに依存します。そのほかの依存関係はありません。


***最新バージョンの検索について [#kd0fb59b]
Maven Repo Search(http://maven.ozacc.com/)を使用することで、簡単に最新のバージョンを検索することが出来ます。

s2-anaで検索を行ってみてください。
http://maven.ozacc.com/search?keyword=s2-ana&type=all


**コメント [#z1606a39]
#pcomment(Comment/Sandbox/S2AnA,10,reply)

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS