SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Fessで作るApache Solrベースの全文検索サーバー

Fessで作るApache Solrベースの検索サーバー
~ ロールベース検索編

部門別や役職別などに検索してみよう!

ロールベース検索を利用するための設定

 Fess 4.0.0 betaがインストールしてあるものとします。 まだ、インストールしていない場合は、導入編を参考にしてインストールしてください。

 認証システムにはさまざまなものがありますが、Fessでは別途認証システムを構築せずにFessの既存のログイン画面を利用したTomcatの認証を試せる環境を提供しているので、本記事ではこれを利用してJ2EEの認証情報(Tomcatの認証)を利用したロールベース検索を説明します。

Tomcatにユーザーを追加

 まず、検索結果を出し分けて表示するためにユーザーをTomcatに追加します。今回は、営業部(sales)と技術部(eng)の2つのロールを作成します。

 そして、ユーザーはsalesロールに属するtaroユーザーとengロールに属するhanakoユーザーを追加します。

 これらのユーザー情報を以下のように「conf/tomcat-users.xml」に記述します。

tomcat-users.xmlの内容
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="fess"/>
  <role rolename="solr"/>
  <role rolename="manager"/>
  <role rolename="sales"/><!-- 追加 -->
  <role rolename="eng"/><!-- 追加 -->
  <user username="admin" password="admin" roles="fess"/>
  <user username="solradmin" password="solradmin" roles="solr"/>
  <user username="manager" password="manager" roles="manager"/>
  <user username="taro" password="taropass" roles="sales"/><!-- 追加 -->
  <user username="hanako" password="hanakopass" roles="eng"/><!-- 追加 -->
</tomcat-users>

 既存の認証システムを利用する場合はこの設定は不要です。

app.diconの設定

 ここからがFessに対する設定になります。まず、「webapps/fess/WEB-INF/classes/app.dicon」のroleQueryHelperでデフォルトロールと認証情報の取得方法を設定します。今回はJ2EEの認証情報を用いるので、「app.dicon」のroleQueryHelperは以下のような設定になります。

app.diconの内容
:
<component name="roleQueryHelper" class="jp.sf.fess.helper.impl.RoleQueryHelperImpl">
    <property name="defaultRoleList">
        {"guest"}
    </property>
</component>
:

 J2EEの認証情報を用いる場合は、上記のようにデフォルトロールを設定します。デフォルトロールは、ログインしていない状態で検索するときにそのロールとして検索したと扱われます。デフォルトロールを指定しないと、ログインしていない状態の検索ですべての検索結果が表示されてしまいます。

 J2EEの認証情報以外で利用する場合についてもここで説明しておきます。例えば、リクエストパラメータから認証情報を取得する場合は以下のように設定します。

app.diconの内容
:
<component name="roleQueryHelper" class="jp.sf.fess.helper.impl.RoleQueryHelperImpl">
    <property name="parameterKey">"fessRoles"</property>
    <property name="encryptedParameterValue">false</property>
    <property name="defaultRoleList">
        {"guest"}
    </property>
</component>
:

 ここでは、リクエストパラメータのキーにfessRolesを指定して、ロール情報をカンマ区切りの値で渡すことができます。 例えば、salesロールとadminロールを持つユーザーが検索する際のURLは「http://hostname/fess/search?...&fessRoles=sales%0aadmin」のようにfessRolesを付加されます。 ここではencryptedParameterValueをfalseに設定していますが、この値をtrueにするとfessRolesの値部分をBlowfishやAESなどで暗号化して渡すことができます。 暗号化して値を渡す場合には、FessCipherコンポーネントを指定して復号化できるように設定する必要があります。

fess.diconの設定

 次に「webapps/fess/WEB-INF/classes/fess.dicon」のsystemHelperでJ2EEの認証が利用できるようにします。ここでの設定で、Fessのログイン画面でsalesロールとengロールでもログインできるようになります。カンマ区切りで複数ロールを指定して、以下のような設定になります。

app.diconの内容
:
<component name="systemHelper" class="jp.sf.fess.helper.SystemHelper">
    <property name="authenticatedRoles">"sales,eng"</property>
:

 リクエストパラメータなどの他の認証を用いる場合には、この設定は不要です。

web.xmlの設定

 「fess.dicon」と同様にログインできるようにするために「webapps/fess/WEB-INF/web.xml」のセキュリティ関連の設定を変更します。以下のような設定になります。

app.diconの内容
:
<security-constraint>
  <web-resource-collection>
    <web-resource-name>Fess Authentication</web-resource-name>
    <url-pattern>/login/login</url-pattern>
  </web-resource-collection>
  <auth-constraint>
    <role-name>fess</role-name>
    <role-name>sales</role-name>
    <role-name>eng</role-name>
  </auth-constraint>
</security-constraint>
:
<security-role>
  <role-name>fess</role-name>
</security-role>
<security-role>
  <role-name>sales</role-name>
</security-role>
<security-role>
  <role-name>eng</role-name>
</security-role>
:

 リクエストパラメータなどの他の認証を用いる場合には、この設定は不要です。

次のページ
ロールベース検索の実行

この記事は参考になりましたか?

Fessで作るApache Solrベースの全文検索サーバー連載記事一覧

もっと読む

この記事の著者

菅谷 信介(スガヤ シンスケ)

N2SM, Inc.にソフトウェア・アーキテクトとして勤務。Apache Portalsにて、コミッター兼PMCとして活動。その他、Seasar Projectなどのオープンソースプロジェクトでコミッターとしても活動。オープンソース関連の活動をブログTwitterに投稿。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5605 2010/12/16 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー