Spring配置JNDI加密用户名密码这个标题一共包含了三件事:
1.JNDI配置数据源;
2.加密JNDI配置的用户名密码;
3.Spring配置JNDI;
1. JNDI配置数据源
运用JNDI技术会把数据源的配置信息从项目里分离出来添加到tomcat的context.xml(也可以是server.xml,只是server.xml修改后要重启tomcat)以降低和项目的耦合度,如果配置信息需要修改就不用重新部署项目了。具体做法如下:
在tomcat的context.xml文件中的<Context>标签中添加配置信息,如下:
<Resource
name="jdbc/mybatis"
auth="Container"
type="javax.sql.DataSource"
factory="
EncryptionBasicDataSourceFactory"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/hccgyb"
username="127%136%134%150%136%121%"
password="127%136%134%150%136%121%"
maxActive="20"
maxIdle="10"
maxWait="10000"/>
这里说一下name属性,这是数据源的名字,程序加载数据源就是按这个名字来找的,如果想深入了解,可以去网上了解一下lookup()这个方法(搜索java lookup)。另外同样用绿色标识出来的factory属性是为后面要做的加解密做的必要工作,如果不加密就可以删掉这个属性,它的具体配置会在加密用户名密码那一节说。
2. 加密JNDI配置的用户名密码
加密用户名密码是在网上拷了一段加密的代码,然后跑加密程序把要加密的明文变成密文复制到上面的配置信息中。这里重点要说的是解密的工作:
首先,要拿到配置文件中的用户名和密码。Tomcat启动加载context.xml文件时会通过BasicDataSourceFactory(org.apache.tomcat.dbcp.dbcp. BasicDataSourceFactory,网上说要用tomcat安装目录下lib中的commons-dbcp-1.2.2.jar包里的BasicDataSourceFactory类,对比之后发现这两个包下的BasicDataSourceFactory类功能是一样的,只是其中导入的包稍有不同,可能是由于tomcat的版本不同吧!)这个类拿到数据源配置信息来给数据源各个属性赋值,那么就可以通过继承这个类并修改其中给数据源赋值的代码部分来实现解密的工作。由于BasicDataSourceFactory类里大量的属性方法都private的,所以重新建一个和它一样的类(名字自己起
EncryptionBasicDataSourceFactory)而不是继承。
其次,把解密的方法添加到
EncryptionBasicDataSourceFactory这个类(新建一个java工程来创建这个类)。找到给用户名密码赋值的那段代码,调用解密方法,保存,将工程打成jar包,放到tomcat的lib目录下。另外,
EncryptionBasicDataSourceFactory拷的是哪个jar包里BasicDataSourceFactory的内容,就要把哪个jar放到tomcat的lib目录下。代码片段如下:
if (value != null)
dataSource.setTestWhileIdle(Boolean.valueOf(value).booleanValue());
value = decrypt(properties.getProperty("password")); if (value != null)
dataSource.setPassword(value);
value = properties.getProperty("url");
if (value != null)
dataSource.setUrl(value);
value = decrypt(properties.getProperty("username")); if (value != null)
dataSource.setUsername(value);
value = properties.getProperty("validationQuery");
绿色标识出的decrypt()是加入的解密方法,和之前的加密方法是对应的!
最后,该说说配置信息中的factory属性了。这个属性就是用来指定tomcat配置数据源时所用的类了。注意,这里要写类的全名!
3.Spring配置JNDI
在spring中配置了JNDI后,JNDI就是交由spring管理的一个组件,就不用在web.xml中配置了。配置代码如下:
<beanid="dataSource"class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/
jdbc/mybatis</value>
</property>
</bean>
这里用绿色标出来的
jdbc/mybatis就是在tomcat的context.xml中配置的数据源的名字。
现在三件工作就做完了,其中用到的打jar包,反编译之类的网上资料是很多的,这里就不重复了。
分享到:
相关推荐
spring配置JNDI数据源
TOMCAT8 JNDI对用户名和密码加密
在spring中配置jndi数据源~~
Tomcat6+spring+jndi配置数据源说明.docx
NULL 博文链接:https://zzy603.iteye.com/blog/1039826
如何在spring中等价配置得到原本由jndi配置实现的数据源? 现在的问题是:由于各种原因,当不想使用jndi方式,如何等价的在spring工程内部实现配置?
在安全评测时,数据库密码明文,然后自己做了个工具,使用JNDI的方式将密码配置到了tomcat中,密码配置为密文,里面写了使用说明,希望对大家有帮助
spring获取weblogic jndi数据源的两种方式,一种本地weblogic server获取,无需用户名、密码、IP和端口等;另一种为从其他weblogic server获取,则必须申明用户名、密码、IP和端口
自用CVE-2018-3191 weblogic反序列化exp。
hibernate 3.1+tomcat 5.5.x(配置jndi)hibernate 3.1+tomcat 5.5.x(配置jndi)hibernate 3.1+tomcat 5.5.x(配置jndi)hibernate 3.1+tomcat 5.5.x(配置jndi)hibernate 3.1+tomcat 5.5.x(配置jndi)hibernate 3.1+...
亲测可以使用的,LDAP认证用户名密码,使用JNDI方式认证
glassfish配置jndi(DB2数据库)的详细步骤,注意在步骤2时需要修改数据源名称
如何使用Spring从JNDI查找数据源 Server.xml <资源名称=“ jdbc / javatechie”全局=“ jdbc / javatechie” auth =“容器” type =“ javax.sql.DataSource” driverClassName =“ com.mysql.jdbc.Driver” url...
配置了tomcat之后发现jndi好简单啊,可是碰到了hibernate该怎么做呢,本例详细解析
配置JNDI数据源 spring tomcat
JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来,使得我们可以用名称...本文档主要是tomcat配置jndi有全局配置和局部配置:
WebSphere配置JNDI方法(以配置Oracle数据库为例)【附图】
Tomcat配置JNDI数据源的N种方法
jndi配置,jndi配置jndi配置jndi配置jndi配置jndi配置jndi配置jndi配置
eclipse+mysql+tomcat配置JNDI实现例子 博文链接:https://uuplace.iteye.com/blog/88878