Tomcat JNDI配置忽略,网上这方面的文章一大堆。废话少说直接代码。
java
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 < len; 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 long serialVersionUID = 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 long serialVersionUID = 1L; private RefAddr refAddr; 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配置 改成apache
<Resource factory="org.apache.tomcat.dbcp.SecurityDataSourceFactory" username="加密用户名" password="加密密码" ..... />
对于tomcat7+,SecurityDataSourceFacotry,CryptoUtils类不用打jar,放到tomcat HOME lib中。而之前的版本必须放到Tomcat HOME lib中,且JDBC驱动也要放到Tomcat HOME lib中tomcat