Menu

Documentation

Configuration

最終更新日時: $Date:: 2008-01-12 21:20:21 +0900#$

S2Directoryを動かすに必要なdiconファイルの詳細について説明します。事前にSetupに従い、必要なライブラリをあなたのプロジェクトに配置しておいてください。

S2Directoryを動かすのに必要なdiconファイル

S2Directoryのためのdiconファイルには次のものがあります。

ファイル名 説明 独自定義の必要性
directory.dicon ディレクトリサーバに接続するための各種設定情報を記載します。 必須
directorydao.dicon S2Directoryの基本機能を提供するためのシステム設定を記載します。独自定義することでS2Direcotryを拡張することが出来ます。 機能拡張時に必要
* diconファイル(ダイコンファイル)とはS2Containerで使用する設定ファイルです。
* diconファイルの詳細については、S2Containerのドキュメントを見てください。

directory.dicon: ディレクトリサーバに接続するための各種設定

directory.diconは、ディレクトリサーバに接続するための各種設定情報を定義するdiconファイルです。

設定例

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
	"http://www.seasar.org/dtd/components.dtd">
<components namespace="directory">
<!--
	# Directory Configuration
-->
	<component name="directoryControlProperty"
		class="org.seasar.directory.impl.DirectoryControlPropertyImpl"
			instance="prototype">

		<property name="initialContextFactory">
			"com.sun.jndi.ldap.LdapCtxFactory"
		</property>

	<!--
		# PermissiveSSLSocketFactory is not strictly secure.
		# But, it can connect to the server having the SSL certificate signed by own CA.
		# default value:
		<property name="sslSocketFactory">
			"javax.net.ssl.SSLSocketFactory"
		</property>
	-->
		<property name="sslSocketFactory">
			"org.seasar.directory.impl.PermissiveSSLSocketFactory"
		</property>
		<property name="enableTLS">false</property>

		<property name="url">
			"ldap://localhost:389"
		</property>
		<property name="baseDn">"dc=seasar,dc=org"</property>
		<property name="user">"cn=Manager"</property>
		<property name="password">"secret"</property>
		<property name="passwordAlgorithm">"SHA"</property>
		<property name="multipleValueDelimiter">"__"</property>

	<!--
		# Other options and each default value.
		<property name="passwordAlgorithm">"SSHA"</property>
		<property name="userSuffix">"ou=Users"</property>
		<property name="userAttributeName">"uid"</property>
		<property name="groupSuffix">"ou=Groups"</property>
		<property name="groupAttributeName">"memberUid"</property>
		<property name="multipleValueDelimiter">","</property>
	-->
	</component>
</components>

directoryControlPropertyコンポーネントに関する設定の説明

設定項目 説明 必須設定 設定例の値 デフォルトの値
initialContextFactory ディレクトリサーバ接続に使用するコンテキストファクトリ 任意 com.sun.jndi.ldap.LdapCtxFactory
(Sun JDK標準付属)
com.sun.jndi.ldap.LdapCtxFactory
(Sun JDK標準付属)
sslSocketFactory SSL接続を利用するための設定 任意 javax.net.ssl.SSLSocketFactory もしくは org.seasar.directory.impl.PermissiveSSLSocketFactory javax.net.ssl.SSLSocketFactory
enableTLS TLS接続を利用するための設定 任意 true もしくは false false
url 接続先ディレクトリサーバのプロトコル://アドレス:ポート番号 必須 ldap://localhost:389 null
baseDn ディレクトリツリーのベースDN 必須 dc=seasar,dc=org null
user 標準で使用するディレクトリツリーへの接続ユーザ 必須 cn=Manager
(cn=Manager,dc=seasar,dc=orgと同意)
null
password 標準で使用するディレクトリツリーへの接続ユーザのパスワード 必須 secret null
passwordAlgorithm ユーザパスワードを管理するのに使用するの暗号化方式
対応している方式: MD5、SMD5、SHA、SSHA、PLAIN
任意 デフォルトの値 SSHA
userSuffix ユーザエントリのルートとなるDN。baseDnを含まない場合、自動的に補完されます。 任意 デフォルトの値 ou=Users
(ou=Users,dc=seasar,dc=orgと同意)
userAttributeName ユーザエントリを特定するための属性名 任意 デフォルトの値 uid
groupSuffix グループエントリのルートとなるDN。baseDnを含まない場合、自動的に補完されます。 任意 デフォルトの値 ou=Groups
(ou=Groups,dc=seasar,dc=orgと同意)
groupAttributeName グループエントリを特定するための属性名 任意 デフォルトの値 memberUid
multipleValueDelimiter 複数値のための区切り文字 任意 デフォルトの値 , (カンマ)

SSL/TLS接続利用時のsslSocketFactoryについて

S2Directory 0.6以降、ディレクトリサーバへの接続にSSL接続、もしくは、STARTTLS接続を利用した暗号化通信を行うことができます。
関連する設定項目である sslSocketFactory には、javax.net.ssl.SSLSocketFactory もしくは org.seasar.directory.impl.PermissiveSSLSocketFactory を利用することができます。
どちらであっても暗号化通信を行うことは出来ますが、下記のような違いがあります。

sslSocketFactoryの設定値の説明

設定値 説明
javax.net.ssl.SSLSocketFactory
(JDK標準付属)
利用するJDKに予めインポートされている認証局によって署名されたSSL証明書を持つディレクトリサーバのみと通信できます
org.seasar.directory.impl.PermissiveSSLSocketFactory いわゆる独自認証局によって署名されたSSL証明書を含む、あらゆるSSL証明書を持つディレクトリサーバと通信できます

org.seasar.directory.impl.PermissiveSSLSocketFactory 使用時の注意事項

  • 正当な第3者機関によって署名された信頼されるSSL証明書を持つディレクトリサーバ以外に接続したくない場合は利用しないでください。
  • directory.diconのurlに設定したFQDNとディレクトリサーバが持つSSL証明書に記入されたCommon Nameが異なっている場合でも暗号化通信を行います。

コネクションプールを利用するための設定

S2Directory 0.6以降、JDKが提供するコネクションプールの利用が実験的にサポートされました。
コネクションプーリングを利用する場合、directory.diconに次の設定を足すことで利用することができます。

コネクションプーリング使用時の注意事項

  • コネクションプーリングの設定はアプリケーション動作中に動的に変更することはできません。
  • 物理コネクションが正常にcloseされない時がある DIRECTORY-21
  • コネクションの識別方法が、java.naming.security.principalとjava.naming.security.credentialsなため、前回コネクション作成時に存在したユーザエントリを、ディレクトリ上から削除した場合、同じユーザ名・パスワードでコネクションを取得するとプーリングされていたコネクションを取得できてしまう。
    • ユーザモード利用時は起こりやすいので要注意

directory.diconへの追加設定例

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
	"http://www.seasar.org/dtd/components.dtd">
<components namespace="directory">
<!--
	# Connection Pooling Configuration
		Connection pooling is supported only on the Java 2 SDK, v 1.4.1, and later releases.
		http://java.sun.com/products/jndi/tutorial/ldap/connect/config.html
		http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/jndi/jndi-ldap.html#POOL
-->
	<component name="connectionPool"
		class="org.seasar.directory.impl.DirectoryConnectionPoolImpl">
		<property name="authentication">"none simple DIGEST-MD5"</property>
		<property name="debug">"fine"</property>
		<property name="initSize">1</property>
		<property name="maxSize">10</property>
		<property name="prefSize">5</property>
		<property name="protocol">"plain ssl"</property>
		<property name="timeout">3000</property>
	</component>

<!--
	# Directory Configuration
-->
	<component name="directoryControlProperty"
		class="org.seasar.directory.impl.DirectoryControlPropertyImpl"
			instance="prototype">
		... コネクションプーリングを利用しない場合と同じため省略 ...
	</component>
</components>

directorydao.dicon: S2Directoryの基本機能を提供するためのシステム設定

directorydao.diconは、S2Directoryの基本機能を提供するためのシステム設定を定義するdiconファイルです。独自定義することでS2Direcotryを拡張することが出来ます。S2Directoryの機能を拡張したい方以外はこの設定ファイルの詳細を知る必要はありません。

directorydao.dicon に関する注意事項

  • S2Directoryの標準機能を使う場合はこのファイルを用意する必要はありません。
  • 独自に用意されていない場合、s2-directory-X.X.X.jar ファイル内の標準設定が自動的に使われます。
  • directorydao.diconはバージョンアップ時に仕様が変更されることがあります。そのため、独自にカスタマイズする場合、S2Directory自体をバージョンアップする際に、変更があるかどうか必ず確認してください。

標準設定

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
	"http://www.seasar.org/dtd/components21.dtd">
<components namespace="directorydao">
	<include path="directory.dicon"/>

	<!-- attribute handlers -->
	<component name="defaultHandler" class="org.seasar.directory.attribute.DefaultAttributeHandler"/>
	<component class="org.seasar.directory.attribute.DistinguishedNameAttributeHandler">
		<property name="attributeNameList">{"dn"}</property>
	</component>
	<component class="org.seasar.directory.attribute.UserPasswordAttributeHandler">
		<property name="attributeNameList">{"userPassword", "alternativeUserPassword"}</property>
	</component>

	<!-- factory -->
	<component class="org.seasar.directory.impl.DirectoryDataSourceFactoryImpl"/>
	<component class="org.seasar.directory.impl.DirectoryAttributeHandlerFactoryImpl">
		<property name="ignoreCase">true</property>
		<property name="defaultAttributeHandler">defaultHandler</property>
		<property name="attributeHandlers">container.findComponents( @org.seasar.directory.attribute.AttributeHandler@class)</property>
	</component>
	<component class="org.seasar.directory.impl.DirectoryValueTypeFactoryImpl"/>
	<component class="org.seasar.directory.dao.impl.DirectoryAnnotationReaderFactoryImpl"/>
	<component class="org.seasar.directory.dao.impl.DirectoryDaoMetaDataFactoryImpl"/>
	<component class="org.seasar.directory.dao.impl.DirectoryDaoNamingConventionImpl"/>

	<!-- interceptor -->
	<component name="interceptor"
		class="org.seasar.directory.dao.interceptors.S2DirectoryDaoInterceptor"/>
</components>

標準設定の説明

設定項目 説明
<include path="directory.dicon"/> ディレクトリサーバ接続情報が書かれた設定ファイルを読み込む
org.seasar.directory.attribute.DefaultAttributeHandler 属性名に応じて属性値を比較、変換する際の標準属性ハンドラ
org.seasar.directory.attribute.DistinguishedNameAttributeHandler 属性DNのための属性値を比較、変換する際の属性ハンドラ
org.seasar.directory.attribute.UserPasswordAttributeHandler 属性userPasswordのための属性値を比較、変換する際の属性ハンドラ
暗号化されているパスワードの検証や、暗号化パスワードを生成します
org.seasar.directory.impl.DirectoryDataSourceFactoryImpl ディレクトリへ接続するためのコネクションデータソースファクトリ
org.seasar.directory.impl.DirectoryAttributeHandlerFactoryImpl 属性名に応じて属性値を比較、変換する際の属性ハンドラファクトリ
org.seasar.directory.impl.DirectoryValueTypeFactoryImpl 属性値を読み書きする際の型変換ファクトリ
org.seasar.directory.dao.impl.DirectoryAnnotationReaderFactoryImpl アノテーションリーダファクトリ
org.seasar.directory.dao.impl.DirectoryDaoMetaDataFactoryImpl メタオブジェクトファクトリ
org.seasar.directory.dao.impl.DirectoryDaoNamingConventionImpl DirectoryDaoのための命名規則
org.seasar.directory.dao.interceptors.S2DirectoryDaoInterceptor S2AOPのためのインタセプター