ロールベース検索を利用するための設定
Fess 4.0.0 betaがインストールしてあるものとします。 まだ、インストールしていない場合は、導入編を参考にしてインストールしてください。
認証システムにはさまざまなものがありますが、Fessでは別途認証システムを構築せずにFessの既存のログイン画面を利用したTomcatの認証を試せる環境を提供しているので、本記事ではこれを利用してJ2EEの認証情報(Tomcatの認証)を利用したロールベース検索を説明します。
Tomcatにユーザーを追加
まず、検索結果を出し分けて表示するためにユーザーをTomcatに追加します。今回は、営業部(sales)と技術部(eng)の2つのロールを作成します。
そして、ユーザーはsalesロールに属するtaroユーザーとengロールに属するhanakoユーザーを追加します。
これらのユーザー情報を以下のように「conf/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は以下のような設定になります。
:
<component name="roleQueryHelper" class="jp.sf.fess.helper.impl.RoleQueryHelperImpl">
<property name="defaultRoleList">
{"guest"}
</property>
</component>
:
J2EEの認証情報を用いる場合は、上記のようにデフォルトロールを設定します。デフォルトロールは、ログインしていない状態で検索するときにそのロールとして検索したと扱われます。デフォルトロールを指定しないと、ログインしていない状態の検索ですべての検索結果が表示されてしまいます。
J2EEの認証情報以外で利用する場合についてもここで説明しておきます。例えば、リクエストパラメータから認証情報を取得する場合は以下のように設定します。
:
<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ロールでもログインできるようになります。カンマ区切りで複数ロールを指定して、以下のような設定になります。
:
<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」のセキュリティ関連の設定を変更します。以下のような設定になります。
:
<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>
:
リクエストパラメータなどの他の認証を用いる場合には、この設定は不要です。
