<script></script>看到一些朋友需要對(duì)tomcat連接池進(jìn)行加密http://topic.csdn.net/u/20071023/15/3b85f3bf-73fa-4f06-8c94-a76431afd5d3.html,偶有感觸,在艷照門事件的影響下,大家都對(duì)公司核心數(shù)據(jù)的加密非常關(guān)注,即使是服務(wù)器連接池,也必須防止硬件工程師在無意或有意把數(shù)據(jù)拿走后保證數(shù)據(jù)的安全性,面對(duì)這樣的問題,SybaseASA已經(jīng)提供了數(shù)據(jù)庫的加密,只要沒有密鑰的情況下,即使拿到數(shù)據(jù)庫也會(huì)無法查看其中的數(shù)據(jù),這對(duì)需要數(shù)據(jù)庫級(jí)加密的需求來說是非常棒的,但在可以找到的TOMCAT連接池配置中卻只能用明碼保存連接配置,管理員或硬件維護(hù)員可以很容易的獲得密鑰,這樣就使數(shù)據(jù)庫的加密變得毫無意義,這時(shí)怎么辦呢?下面將一步一步教大家解決的方法:
先看到在英文版Professional Apache Tomcat 6(http://download.csdn.net/source/264074
有下載)的Chapter 13: JDBC Connectivity中有一節(jié),Alternative Connection Pool Managers,在這一節(jié)中詳細(xì)描述了動(dòng)態(tài)創(chuàng)建連接的方法,便動(dòng)手進(jìn)行測試
1.下載c3p0 Pool Manager,http://nchc.dl.sourceforge.net/sourceforge/c3p0/c3p0-0.9.1.2.bin.zip
2.在項(xiàng)目中添加c3p0的引用,即把c3p0-0.9.1.2.jar添加到項(xiàng)目中。
3.建立Bean
package mydatabase;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class database_connection ...{
private static ComboPooledDataSource pool = null;
public static Connection get_connection() throws Error
...{
try ...{
if (pool == null)
...{
pool = new ComboPooledDataSource();
pool.setDriverClass( "ianywhere.ml.jdbcodbc.IDriver" );
pool.setJdbcUrl( "jdbc:odbc:dsn=FunctionFace;uid=aaa;pwd=bbb;dbkey=數(shù)據(jù)庫是加密的哦;dbf=D:/WorkPlace/WorkLine/FirstTmp/Database/FunctionFace.db" );
pool.setUser("dba");
pool.setPassword("sql");
pool.setAcquireIncrement(3);
pool.setMaxPoolSize(30);
}
return pool.getConnection();
} catch (Exception e) ...{
e.printStackTrace();
}
throw new Error("沒有找到數(shù)據(jù)庫連接配置!!");
}
}
4.在JSP界面中調(diào)用
<%...@ page language="java" pageEncoding="utf-8"%>
<%...@ page import="java.sql.*"%>
<%...@ page import="mydatabase.database_connection"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>使用動(dòng)態(tài)連接池的實(shí)驗(yàn)</title>
</head>
<body>
我們偉大的CSDN的同志是不用JSP來開發(fā)的,居然不能導(dǎo)入JSP程序,真暈,不知道是否大家是否看得清楚下面這段代碼
<%...
out.println("開始連接數(shù)據(jù)庫!!");
//out.println(System.getProperty("java.library.path"));
try{
//database_base dba = new database_base();
Connection conn = database_connection.get_connection();
out.println("獲取連接池成功!!<br>");
out.println("<br>");
out.println("下面根據(jù)JDBC元數(shù)據(jù)提取 實(shí)驗(yàn)表A 的主鍵字段信息:<br>");
DatabaseMetaData b = conn.getMetaData();
ResultSet pkRSet = b.getPrimaryKeys(null, null, "實(shí)驗(yàn)表A");
while (pkRSet.next()) {
out.println("****** Comment ******<br>");
out.println("TABLE_CAT : "+pkRSet.getObject(1)+"<br>");
out.println("TABLE_SCHEM: "+pkRSet.getObject(2)+"<br>");
out.println("TABLE_NAME : "+pkRSet.getObject(3)+"<br>");
out.println("COLUMN_NAME: "+pkRSet.getObject(4)+"<br>");
out.println("KEY_SEQ : "+pkRSet.getObject(5)+"<br>");
out.println("PK_NAME : "+pkRSet.getObject(6)+"<br>");
out.println("****** ******* ******<br>");
}
//conn.close(); 這里不要關(guān)掉哦,讓系統(tǒng)自己管理連接好了
//out.println("關(guān)閉連接<br>");
} catch (Exception ex) {
out.print(ex.getMessage());
ex.printStackTrace();
}
%>
</body>
</html>