プールの設定
WebContext/META-INF/context.xmlを作成する
<?xml version='1.0' encoding='utf-8'?>
<Context>
<Resource name="jdbc/public" auth="Container" type="javax.sql.DataSource"
driverClassName="org.postgresql.Driver" url="jdbc:postgresql://localhost:5432/データベース"
username="ユーザ" password="パスワード" initialSize="5" maxActive="5"
maxIdle="5" minIdle="5" maxAge="0" maxWait="1800" />
</Context>
WebContext/WEB-INF/web.xml
<resource-ref>
<res-ref-name>jdbc/public</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
ソース
DataSource ds = null;
Context ctx = new InitialContext();
ds = (DataSource) ctx.lookup("java:comp/env/jdbc/public");
try {
} catch (Exception e) {
}
Connection conn = ds.getConnection();
javaの証明書を作成する(サーバ証明書を作成後)
1)cacertsをコピーして名前を変える
C:\Program Files\Java\jre7\lib\securityのcacertsをcacerts_java
2)コマンドプロンプトを管理者モードで開き、C:\Program Files\Java\jre7\binに移動して以下を実行する
keytool.exe -import -alias postgresql -file c:\Opt\apache\conf\server.crt -trustcacerts -keystore ..\lib\security\cacerts_java
キーストアのパスワードを入力してください:changeit
所有者: O=Internet Widgits Pty Ltd, ST=Some-State, C=AU
発行者: O=Internet Widgits Pty Ltd, ST=Some-State, C=AU
シリアル番号: cc3fcda13d33aede
有効期間の開始日: Wed Jul 09 14:52:52 JST 2014終了日: Sat Jul 06 14:52:52 JST 20
24
証明書のフィンガプリント:
MD5: 82:75:19:B7:23:B2:78:6C:5B:E1:67:66:AA:66:CF:C4
SHA1: 5E:73:BC:CD:67:7F:7A:B9:E1:B2:2D:AA:A5:F2:C2:46:CF:3C:CF:18
SHA256: 76:91:14:B5:4F:E1:FA:45:63:28:00:4C:6E:AB:78:A3:DF:B7:8A:B4:F3:
6E:DE:7A:A1:37:BC:82:95:D6:35:8F
署名アルゴリズム名: SHA1withRSA
バージョン: 1
この証明書を信頼しますか。 [いいえ]: はい
証明書がキーストアに追加されました
3)作成した、cacerts_javaをどこでもいいがc:\Opt\apache\confに置く
jdbcを呼び出す前に、プロパティをセットする(以下はソースの抜粋)
System.setProperty("javax.net.ssl.trustStore", "C:/Opt/apache/conf/cacerts_java");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
SSL接続にする(postgreSQLをSSL化した後の話)
context.xmlを以下を追記する
connectionProperties="ssl=true"
context.xmlにベタにユーザ/パスワードを記載したくない場合の抜け道
context.xmlを以下を追記する
factory="hoge.dao.MyBasicDataSourceFactory"
クラスを作成する
public class MyBasicDataSourceFactory extends BasicDataSourceFactory {
@Override
public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable environment)
throws Exception
{
if ((obj == null) || (!(obj instanceof Reference))) {
return null;
}
Reference ref = (Reference) obj;
if (!("javax.sql.DataSource".equals(ref.getClassName()))) {
return null;
}
// 見えないフィールドなので、リフレクションで取得する
Field field = BasicDataSourceFactory.class.getDeclaredField("ALL_PROPERTIES");
field.setAccessible(true);
String[] ALL_PROPERTIES = (String[]) field.get(BasicDataSourceFactory.class);
Properties properties = new Properties();
for (int i = 0; i < ALL_PROPERTIES.length; ++i) {
String propertyName = ALL_PROPERTIES[i];
RefAddr ra = ref.get(propertyName);
if (ra != null) {
String propertyValue = ra.getContent().toString();
// パラメータ名がpasswordだった場合は復号化して、セットする
if ("password".equals(propertyName)) {
// 復号化
// TODO: 復号化ロジックを呼び出す
// セットしなおす
propertyValue = "xxxx";
}
properties.setProperty(propertyName, propertyValue);
}
}
System.setProperty("javax.net.ssl.trustStore", "C:/Opt/apache/conf/cacerts_java");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
return createDataSource(properties);
}
}
最終更新:2014年07月25日 10:32