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