Tomcat JNDI配置忽略,网上这方面的文章一大堆。废话少说直接代码。
package org.apache.tomcat.dbcp;
import javax.naming.RefAddr;
import javax.naming.Reference;
import org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory;
import com.yjh.commons.CryptoUtils;
public class SecurityDataSourceFactory extends BasicDataSourceFactory {
@Override
@SuppressWarnings("rawtypes")
public Object getObjectInstance(Object obj, javax.naming.Name name, javax.naming.Context nameCtx,
java.util.Hashtable environment) throws Exception {
if ((obj == null) || !(obj instanceof Reference)) {
return null;
}
Reference ref = (Reference) obj;
RefAddr ra = null;
int len = ref.size();
for (int i = 0; i
ra = ref.get(i);
if ("password".equalsIgnoreCase(ra.getType())
|| "username".equalsIgnoreCase(ra.getType())) {
ref.remove(i);
ref.add(i, new TransformRefAddr(ra) {
private static final longserialVersionUID= 1L;
@Override
public Object transform(Object obj) {
//CryptoUtils.decode(String) 提供解密
return CryptoUtils.decode(obj.toString());
}
});
}
}
return super.getObjectInstance(obj, name, nameCtx, environment);
};
private abstract class TransformRefAddr extends RefAddr {
private static final longserialVersionUID= 1L;
private RefAddrrefAddr;
public TransformRefAddr(RefAddr refAddr) {
super(refAddr.getType());
this.refAddr = refAddr;
}
@Override
public Object getContent() {
return this.transform(refAddr.getContent());
}
public abstract Object transform(Object obj);
}
}
tomcat JNDIP配置 改为
username="加密用户名"
password="加密密码"
.....
/>
对于tomcat7+,SecurityDataSourceFacotry,CryptoUtils类不用打jar,放到tomcat HOME lib中。而以前的版本必须放到Tomcat HOME lib中,且JDBC驱动也要放到Tomcat HOME lib中