Menu

Documentation

S2Directory の動作に必要な dicon ファイル

S2Directory の動作に必要な dicon ファイルには次のものがあります。

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

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

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

S2Directory 0.6.1 以前から 0.7.0 以降へ更新する場合の注意

  • 匿名接続を行いたい場合は、明示的に authentication へ none を設定してください。
  • user の代わりに bindDn の使用を推奨します。user はユーザモード実行を行いたい時のみにプログラム中から値を設定して使用してください。
  • multipleValueDelimiter の初期値が , から DEFAULT_MULTIPLE_VALUE_DELIMITER へ変更されています。

設定例

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
	"http://www.seasar.org/dtd/components24.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="bindDn">"cn=Manager,dc=seasar,dc=org"</property>
		<property name="password">"secret"</property>

	<!--
		# Other options and each default value.
		<property name="authentication">"simple"</property>
		<property name="user"></property>
		<property name="passwordAlgorithm">"SSHA"</property>
		<property name="passwordSaltLength">"4"</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">"DEFAULT_MULTIPLE_VALUE_DELIMITER"</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
bindDn 標準で使用するディレクトリツリーへの接続のための管理者 DN 任意 cn=Manager,dc=seasar,dc=org null
password 標準で使用するディレクトリツリーへの接続ユーザのパスワード 任意 secret null
authentication コネクション取得時の認証メソッド 任意 simple: 通常の認証機構を使用します
none: 認証を使用しません (匿名接続)
simple
user ディレクトリツリーへの接続ユーザ 任意 user1
(DN の代わりにユーザ名を指定した場合、userSuffix が補完されます)
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 複数値のための区切り文字 任意 デフォルトの値 DEFAULT_MULTIPLE_VALUE_DELIMITER

[オプション] 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.7.1 以降、コネクション作成時に任意のプロパティを設定できます。 指定可能な項目や値は LDAP Naming Service Provider のドキュメントを参照してください。

使用時の注意事項

  • この機能により設定した値は初期値として扱われます。 DirectoryControlProperty に設定可能でありコネクション作成時に同じ項目が設定される場合、 DirectoryControlProperty の値が優先的に使われます。

directory.diconへの追加設定例

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
	"http://www.seasar.org/dtd/components24.dtd">
<components namespace="directory">

<!--
	# Default Environment Properties
	http://docs.oracle.com/javase/6/docs/technotes/guides/jndi/jndi-ldap.html
-->
	<component name="directoryDefaultEnvironment" class="java.util.Hashtable"
		instance="prototype">
		<initMethod>#self.put("com.sun.jndi.ldap.connect.timeout", "500")</initMethod>
		<initMethod>#self.put("com.sun.jndi.ldap.read.timeout", "5000")</initMethod>
	</component>

<!--
	# Directory Configuration
-->
	<component name="directoryControlProperty"
		class="org.seasar.directory.impl.DirectoryControlPropertyImpl"
			instance="prototype">
		<property name="defaultEnvironment">directoryDefaultEnvironment</property>
		... 環境プロパティ設定を指定しない場合と同じため省略 ...
	</component>
</components>

[オプション] SearchControls 設定

S2Directory 0.7.1 以降、検索時に使用される SearchControls のオプション値を設定できます。 指定可能な項目や値は SearchControls の JavaDoc ドキュメントを参照してください。

directory.diconへの追加設定例

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
	"http://www.seasar.org/dtd/components24.dtd">
<components namespace="directory">

<!--
	# Default SearchControls
	http://docs.oracle.com/javase/1.5.0/docs/api/javax/naming/directory/SearchControls.html
-->
	<component name="directoryDefaultSearchControls" class="javax.naming.directory.SearchControls"
		instance="prototype">
		<property name="countLimit">1000</property>
		<property name="searchScope">@javax.naming.directory.SearchControls@SUBTREE_SCOPE</property>
		<property name="timeLimit">5000</property>
	</component>

<!--
	# Directory Configuration
-->
	<component name="directoryControlProperty"
		class="org.seasar.directory.impl.DirectoryControlPropertyImpl"
			instance="prototype">
		<property name="defaultSearchControls">directoryDefaultSearchControls</property>
		... SearchControl 設定を指定しない場合と同じため省略 ...
	</component>
</components>

[オプション] 抽象オブジェクトクラス設定

S2Directory 0.7.1 以降、エントリ作成時に自動的に追加される抽象オブジェクトクラスを設定できます。
このオプション設定を指定しなかった場合は、S2Directory 0.7.0 以前同様、top が設定されています。

使用時の注意事項

  • top を含め何も追加して欲しくない場合は、<property name="abstractObjectClasses">new String[] {""}</property> を指定します。

directory.diconへの追加設定例

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
	"http://www.seasar.org/dtd/components24.dtd">
<components namespace="directory">

<!--
	# Directory Configuration
-->
	<component name="directoryControlProperty"
		class="org.seasar.directory.impl.DirectoryControlPropertyImpl"
			instance="prototype">
		<property name="abstractObjectClasses">new String[] {"top", "alias"}</property>
		... 抽象オブジェクトクラス設定を指定しない場合と同じため省略 ...
	</component>
</components>

[オプション] コネクションプール設定

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 2.4//EN"
	"http://www.seasar.org/dtd/components24.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 2.4//EN"
	"http://www.seasar.org/dtd/components24.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のためのインタセプター