デプロイされたアプリケーションは、前述した通り、Seamアプリケーションフレームワークを用いた、基本的なCRUD機能を持つWebアプリケーションである。以降では、自動生成されたICEfaces×JBoss Seamアプリケーションについて見ていくことにする。

画面レイアウト

まず画面についてだが、(JSPではなく)Faceletsを用いて構築されている。画面のレイアウトは、layout/template.xhtmlファイルに記述されており、次のような特徴を持つ。

  • スタイルとしては、ICEfacesのデフォルトのテーマであるXPを用いている
  • 画面の左上に、コネクションステータスコンポーネント(ice:outputConnectionStatus)により、サーバとの接続状況が表示される
  • フッタには、折りたたみパネルコンポーネント(ice:panelCollapsible)を用いている

認証と承認

ログインページにアクセスすると、図9のような認証画面が表示される。

図9 ログイン画面

この認証機能は、JBoss Seamが提供するIdentityコンポーネントを用いて実装されている。Identityコンポーネントは、ユーザ名、パスワードを用いた認証のためのコンポーネントである。このコンポーネントは、components.xmlに設定されている(リスト6のタグ)。このように設定することで、リスト5のAuthenticator#authenticate()メソッドが、認証ロジックとして機能する(リスト5では認証ロジックは空であり、必ず認証に成功する)。

リスト5 認証用のクラスであるAuthenticatorクラス(コメントなどを省略している)

@Name("authenticator")
public class Authenticator {
    @In
    Identity identity;

    public boolean authenticate() {
        identity.addRole("admin");
        return true;
    }
}

リスト6は、components.xmlファイルにおける、JBoss Seamにおけるセキュリティの設定である。

リスト6 JBoss Seamのセキュリティ設定(components.xml)

<drools:rule-base name="securityRules">
  <drools:rule-files>
    <value>/security.drl</value>
  </drools:rule-files>
</drools:rule-base>

<security:identity authenticate-method="#{authenticator.authenticate}"
  security-rules="#{securityRules}" remember-me="true" />

<event type="org.jboss.seam.notLoggedIn">
  <action expression="#{redirect.captureCurrentView}" />
</event>
<event type="org.jboss.seam.postAuthenticate">
  <action expression="#{redirect.returnToCapturedView}" />
</event>

詳細はJBoss Seamリファレンスマニュアルを参照いただくとして、ここでは簡単に説明しておく。

<drools>タグ

ルールエンジンであるDrools(JBoss Rules)を用いることを設定している。認証および承認のルールの設定ファイルはsecurity.drlであり、現状では何も設定されていない。

<security>タグ

前述した通り、Identityコンポーネントを設定している。また、認証および承認のルールにsecurity.drlを用いるように設定している。

<event>タグ

イベントリスナを設定している。ここでは、ある(承認されていない)ページにアクセスしエラーになった際に、そのページを保持しておき、再度ログインした場合に該当ページに遷移させるように設定している。

上記、イベントとアクションの設定は、容易ながら非常に強力である。たとえば、画面上部(ヘッダ)のリンクIceUserListをクリックすると、次ページの図10(左)のようなユーザ一覧が表示される。ログインしていない状態で、この画面の下部にある「Create iceUser」ボタンを押下すると、(図9のように)ログインすべき旨のエラーとなる。ここで、適当なユーザ名とパスワード(値は何でもよい)を用いてログインすると、ログイン前にアクセスしようとしていた新規ユーザ作成ページへと遷移する。