JNDI配置过程:
1、打开tomcat/conf/context.xml,在中增加:
auth="Container"
type="javax.sql.DataSource"
password="root"
username="root"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/t_twoss"
maxActive="5"
maxIdle="2"
maxWait="3000"
/>
修改成自己数据库信息;
直接在tomcat中更改重启会还原,要在项目中的Servers中找到对应tomcat进行修改。
2、注释掉项目中jdbc.properties中的数据库相关配置。
3、项目中spring-mybatis.xml中先注释原有数据源配置:
再增加新的配置:
4、项目中web.xml中增加jndi配置:
jndi
javax.sql.DataSource
Container
以上,jndi基本配置已完成,下面是加密配置:
1、修改tomcat/conf/context.xml中数据源信息为:
auth="Container"
type="javax.sql.DataSource"
factory="dataSourceFactory.MyBasicDataSourceFactory"
password="41646d696e31323321"
username="admin"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://10.7.132.34:3306/t_twoss"
maxActive="5"
maxIdle="2"
maxWait="3000"
/>
具体属性解释在步骤4
2、新建java工程:
先导入commons-dbcp-1.2.2.jar包,创建两个类,其中Encode用来对数据加密解密;
MyBasicDataSourceFactory继承了上述jar包里的BasicDataSourceFactory类,用来获取数据源,并调用加解密方法:
MyBasicDataSourceFactory类的代码,和dbcp的jar包中的BasicDataSourceFactory类内容一样,只修改如下地方:
原本是:
修改为:
其中Encode.decode()方法为Encode类中的解密方法:
最后将java工程打包为jar包。
3、将java工程jar包,以及commons-dbcp-1.2.2.jar和commons-pool-1.3.jar复制到tomcat下lib目录(两个jar包maven下有)。
4、步骤1中factory属性为java工程中package.MyBasicDataSourceFactory类;
password属性是通过java工程中的Encode类进行加密后的值。
完成重启tomcat。
对username可用相同步骤加密。
具体用什么加密方法可以自己定义自己写;
Encode类的代码可参考:
package dataSourceFactory;
public class Encode {
//加密public static String encode(String password) {
String result = "";
byte[] psd = password.getBytes();
for (int i = 0; i < psd.length; i++) {
result += Integer.toHexString(psd[i] & 0xff);
}
return result;
}
//解密public static String decode(String password) {
String result = "";
password = password.toUpperCase();
int length = password.length() / 2;
char[] hexChars = password.toCharArray();
byte[] d = new byte[length];
for (int i = 0; i < length; i++) {
int pos = i * 2;
d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
}
result = new String(d);
return result;
}
//字符转字节public static byte charToByte(char c) {
return (byte) "0123456789ABCDEF".indexOf(c);
}
public static void main(String args[]) {
System.out.println(encode("root"));
}
}