Configuration
S2Directory を動かすに必要な dicon ファイルの詳細について説明します。事前に Setup に従い、必要なライブラリをあなたのプロジェクトに配置しておいてください。
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のためのインタセプター |