主にJ2EEコンテナによって提供されているAuthentication(認証)とAuthorization(承認)の機能を、Seasarから簡単に使用することを目的としたプロジェクトです。 S2AnAの"AnA"は、Authentication and Authorizationの略です。
S2AnAは大きく2つ、認証系(authentication)と承認系(authorization)に分かれます。
(注) 認証された情報は正しくはPrincipalですが、このドキュメントでは簡単に理解していただくためにPrincipalのことをユーザと書いております。実際のPrincipalは人間だけでなく組織や機械を指し示すこともあります。
認証系と承認系を結ぶためのインターフェイスです。コンテナや個々のアプリケーションで認証した情報に対して、S2AnAはこのインターフェイスを通じてアクセスします。 実装する場合には、以下のメソッドを実装する必要があります。
なお、AuthenticationContextの簡易実装としてRequestDelegatingAuthenticationContextを提供しています。
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" />
現在3つのinterceptorをS2AnAで用意しています
これら承認系のinterceptorに対して、AuthenticationContextがインジェクトされます。
「認証されているかどうか」をチェックするinterceptorです。インジェクトされているAuthenticationContextのisAuthenticatedメソッドを使用して、既に認証が行われているかどうかを検査します。
AuthenticationContext#isAuthenticatedがfalseを返す場合にはSNotAuthenticatedExceptionを投げます。 この例外をキャッチしてログイン画面等に遷移させるのが典型的な使用例となります。
diconファイルへの記述例
<component name="authenticatedAccessOnly" class="org.seasar.security.authorization.AuthenticatedAccessOnlyInterceptor"/>
インジェクトされているAuthenticationContextのisUserInRoleメソッドを使用して、アクセスしているユーザが指定されたロールに属しているかどうかを検査します。
AllowInterceptorにアクセスが許可されなかったか、またはDenyInterceptorにアクセスが拒否された場合には、SAccessDeniedExceptionが投げられます。
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>
t-wada[http://d.hatena.ne.jp/t-wada/]と申します。よろしくお願いします。
RFPは、こちら[http://d.hatena.ne.jp/koichik/20041122#1101145610]
S2AnAはS2コアとS2AOPに依存します。そのほかの依存関係はありません。
最新の10件を表示しています。 コメントページを参照