Tomcat JNDI 数据库用户名和密码加密(数据库连接池用户和密码加密)
Tomcat JNDI 数据库用户名和密码加密(数据库连接池用户和密码加密)
啃码人 发表于4年前
Tomcat JNDI 数据库用户名和密码加密(数据库连接池用户和密码加密)
  • 发表于 4年前
  • 阅读 410
  • 收藏 0
  • 点赞 1
  • 评论 0

移动开发云端新模式探索实践 >>>   

摘要: 数据库连接池,用户名和密码加密。本文以Tomcat自带tomcat-dbcp为例,讲解Tomcat JNDI 数据库用户名和密码加密,而对于与spring,或者其它方式提供的数据源,如果也使用tomcat-dbcp连接池,方式一样。

    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 < 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配置 改为

<Resource  factory="org.apache.tomcat.dbcp.SecurityDataSourceFactory"
           username="加密用户名" 
	   password="加密密码"
	   .....
		 />

 对于tomcat7+,SecurityDataSourceFacotry,CryptoUtils类不用打jar,放到tomcat HOME lib中。而以前的版本必须放到Tomcat HOME lib中,且JDBC驱动也要放到Tomcat HOME lib中


  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 2
博文 7
码字总数 3726
×
啃码人
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: