我已经通过 SPNEGO/Kerberos 在带有 SSO 的 Tomcat 上运行 Java Web 应用程序,并且我想将 kerberos 票证传递给数据库,在我的情况下是 Oracle DB(就像 MS 产品中的模拟)。我找到了一个实现示例(http://docs.oracle.com/cd/B28359_01/java.111/b31224/clntsec.htm):
Connection conn = (Connection)Subject.doAs(specificSubject, new PrivilegedExceptionAction({
public Object run() {
Connection con = null;
Properties prop = new Properties();
prop.setProperty(AnoServices.AUTHENTICATION_PROPERTY_SERVICES,"("+AnoServices.AUTHENTICATION_KERBEROS5 + ")");
try {
OracleDriver driver = new OracleDriver();
con = driver.connect(url, prop);
}catch (Exception except){
except.printStackTrace();
}
return con;
}
});
String auth = ((OracleConnection)conn).getAuthenticationAdaptorName();
System.out.println("Authentication adaptor="+auth);
printUserName(conn);
conn.close();
但是众所周知,创建新连接是一项昂贵的操作。为了解决这个问题,常用连接池(如c3p0),但我找不到例子,如何将上面的代码和连接池结合起来。有什么例子吗?