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のためのインタセプター |