配置jndi数据源以及数据库密码加密-程序员宅基地

技术标签: java  web.xml  数据库  

 闲来无事觉得以前用过的一些东西过一段时间会忘记,所以开始想着发博文,第一次发博文,如有问题大家请多多指正。

    1,首先在application.xml里面配置数据源

1
2
3
4
5
     < bean  id = "dataSource"  class = "org.springframework.jndi.JndiObjectFactoryBean" >
          < property  name = "jndiName" >
               < value >java:comp/env/jdbc/userDataSource</ value >
          </ property >
      </ bean >

    2,配置web.xml,刚开始配置的时候,由于没有配置web.xml导致一直连接不上,后面查了一些资料才发现web.xml也需要配置。

1
2
3
4
5
6
   < resource-ref >
      < description >my DB Connection</ description >
      < res-ref-name >jdbc/userDataSource</ res-ref-name >
      < res-type >javax.sql.DataSource</ res-type >
      < res-auth >Container</ res-auth >
   </ resource-ref >

    3,打开tomcat目录下的conf,找到context.xml在里面配置数据库连接

    

1
2
3
4
5
6
7
8
9
10
11
12
13
14
     < Resource  name = "jdbc/userDataSource"   
                auth = "Container"
                type = "javax.sql.DataSource"                  
                driverClassName = "com.mysql.jdbc.Driver"   
                url = "jdbc:mysql://ip/myDataDaseName"   
                username = "root"
                password = "password"
                maxIdle = "40"    
                maxWait = "4000" 
                maxActive = "250" 
                removeAbandoned = "true"
                removeAbandonedTimeout = "180"
                logAbandoned = "true"
                factory = "org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"  />  

现在jndi应该是可以连接数据库了。

注意:如果修改了context里面的数据库连接,导致启动项目连接的还是以前的数据库地址请把eclipse里面Servers下面的tomcat删除掉,然后重新加入就OK了。

 

以上只是简单的用jndi连接数据库。

 

现在说一下怎么把数据库密码进行加密。其实很简单,tomcat里面的这个数据库连接配置最后还是指向

1
org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory

这个连接,反编译一看,发现就是在这个里面获取用户名密码以及其他参数的,所以我们在这里面动下手脚就OK了。源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
value = properties.getProperty( "password" );
     if  (value !=  null ) {
       dataSource.setPassword(value);
     }
 
     value = properties.getProperty( "url" );
     if  (value !=  null ) {
       dataSource.setUrl(value);
     }
 
     value = properties.getProperty( "username" );
     if  (value !=  null ) {
       dataSource.setUsername(value);
     }

我是把这个BasicDataSourceFactory文件复制改名重写了一遍,改后的代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  value = properties.getProperty( "password" );
     if  (value !=  null ) {
       dataSource.setPassword(decode(value));  //解密操作
   }
   //自定义的解密方法,里面引用了AESEncrypt数字签名加密文件,config.properties里面配置了key钥
  private  static  String decode(String password)  throws  Exception {
     byte [] bas = AESEncrypt.parseHexStr2Byte(password);
     InputStream is =  new  FileInputStream( "/opt/config/config.properties" );
     Properties prop =  new  Properties();
 
     prop.load(is);
     String key = prop.getProperty( "key" );
     is.close();
     byte [] decr = AESEncrypt.decrypt(bas, key);
     return  new  String(decr);
   }

然后factory连接指向这个新建的文件就行了

1
  factory="org.apache.tomcat.dbcp.dbcp.DecodeBasicDataSourceFactory"

重写写一个类,是文件方便切换,如果不要加密直接指向BasicDataSourceFactory就行了。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/dyllove90/article/details/84688780

智能推荐

ubuntu下使用UVC摄像头_arkmicro technologies inc. usb2.0 pc camera-程序员宅基地

文章浏览阅读1.2k次。作者:SUKHOI27SMK转自:http://blog.csdn.net/sukhoi27smk/article/details/12003321导师让学习opencv编程,想用Qt但是发现windows上Qt使用directshow非常麻烦,就想到linux上编程,于是买一普通摄像头,回来一看,插在ubuntu电脑上没有反应,知道视驱动的问题,开始探寻如何在ubun_arkmicro technologies inc. usb2.0 pc camera

2021年秋招字节跳动四面总结,部门java后端基础架构,本人已成功拿到意向书_字节使用java的部门-程序员宅基地

文章浏览阅读1.6k次。前言base杭州,整个流程包括周末下来10天左右,因为没有录屏做记录,所以很多问题给忘了,只记得部分。大部分时间是在聊实习经历和项目,其他问题问的不多。8.27 一面(70分钟)实习业务相关lvs四层转发和nginx七层转发的区别?为什么要有lvs四层转发?close_wait和time_wait是什么?为什么要time_wait?499和502出现的原因是什么?session和cookie区别,解决了协议的什么问题?转账过程中,会出现什么事务的问题?from_count ->_字节使用java的部门

Pycharm2019.2.3设置菜单栏的字体大小_pycharm2019运行栏文字大小怎么更改-程序员宅基地

文章浏览阅读1.6k次。Pycharm2019.2.3设置菜单栏的字体大小1、首先进入settings2、选择Appearance3、在 Use custom font 前面勾上,然后就可以选择后面的字体大小了4、最后点击 ok 就完成了。5、亲测有效你要努力成为 “ 一个值得别人去爱的人 ” 而不是 “ 强求别人喜欢这样一个糟糕的你 ”我是凃大郎,一个苦逼的家伙..._pycharm2019运行栏文字大小怎么更改

mybatis-plus整合dynamic-datasource-spring-boot-starter之手动切换多数据源支持多种不同数据库类型(“坎坷之路”)_dynamic-datasource-spring-boot3-starter-程序员宅基地

文章浏览阅读2.3k次。mybatis-plus整合dynamic-datasource-spring-boot-starter之手动切换多数据源支持多种不同数据库类型(“坎坷之路”)简介:今天公司有一个这样场景业务,简单来说需要动态第三方数据源数据库,数据源信息,一开始根据想要查看的表进行一个表的信息与表的数据库信息获取,然后保存本地库内,用户可在界面点击获取到的表进行业务数据处理,需求重点:数据库是动态(会有不同类型数据库,也可能会有多种同种类型数据库),表字段是动态(不同数据库不同字段),所以根据这几点来处理你的CRUD_dynamic-datasource-spring-boot3-starter

【Qt学习】01 动态添加按钮_qt循环方式添加动态多个按钮,按钮名称怎么变-程序员宅基地

文章浏览阅读1.1k次。概述学习内容:两种场景下动态添加按钮的方法。环境IDE:Qt creator 4.11.0编译器:MinGW 5.3.0 32bit for C++场景一存在默认ui的场景,new QPushButton一般在setupUi之后。不然new出来的按钮无法点击。MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow){ ui-&.._qt循环方式添加动态多个按钮,按钮名称怎么变

cblas_sgemm和cublasSgemm参数详解-程序员宅基地

文章浏览阅读9.4k次。机器学习最核心的底层运算肯定是矩阵乘法无疑了,为了让矩阵乘法执行更快,大家也是绞尽脑汁。从算法层面,stranssen算法将矩阵乘法复杂度由O(n3)O(n^3)O(n3)降到O(n2.81)O(n^{2.81})O(n2.81),最新的算法好像已经降到O(n2.37)O(n^{2.37})O(n2.37)左右了(Coppersmith–Winograd algorithm),但这只是理论复杂度,..._cblas_sgemm

随便推点

python源码安装关于ssl的坑_python源码安装 ssl-程序员宅基地

文章浏览阅读1.7k次。python源码安装关于ssl的坑之所以用源码安装也是因为pip安装依赖的时候出现错误的,很奇特的错误。原本都没有注意到这个问题,如果不是用pipreqs ./导出当前项目的依赖包还不会意识到这个问题。两个项目,同样的环境却一个能成功生成requirements.txt而另一个不行。原因如下:pipreqs 工具在读取项目导入依赖的时候,映射依赖名称错误导致本地已安装但读取错误,故下载。这让..._python源码安装 ssl

flutter设置widget显示和隐藏,手动隐藏键盘,container宽度充满_flutter container 超出隐藏-程序员宅基地

文章浏览阅读7k次。Offstage设置widget显隐切换Widget loginMine(BuildContext context) { return Offstage( offstage: !need_login,//true为隐藏,false为显示 child: Container( alignment: AlignmentDirectional.cent..._flutter container 超出隐藏

/etc/fstab文件的详解-程序员宅基地

文章浏览阅读10w+次,点赞48次,收藏220次。一、/etc/fstab文件的作用 磁盘被手动挂载之后都必须把挂载信息写入/etc/fstab这个文件中,否则下次开机启动时仍然需要重新挂载。 系统开机时会主动读取/etc/fstab这个文件中的内容,根据文件里面的配置挂载磁盘。这样我们只需要将磁盘的挂载信息写入这个文件中我们就不需要每次开机启动之后手动进行挂载了。 二、挂载的限制 在说明这..._/etc/fstab

Java基础练习题及详细答案_java基础题 帮同学写的几个iava基础题/1编写 jaa 程序实现: (1)定义如下方法求一-程序员宅基地

文章浏览阅读2.3w次,点赞140次,收藏965次。本文参考 嗨客网 Java 实战前言本篇文章给大家安利一些关于 Java 基础的练习题,每道题都附有答案链接,答案解题的每个步骤到运行结果都十分详细,十分适合小白拿来练习,也十分适合准备面试的各位复习下 Java 基础,这篇文章我会不断更新,题目都是对应 Java 基础中的各个知识点,大家在学习了Java 基础之后,做几道相关的练习题,复习一下该知识点,在学习过程中,觉得十分抽象、晦涩难懂的知识点,配合一道案例题,或许会有意想不到的效果哦! 目录Java入门 Java Hell._java基础题 帮同学写的几个iava基础题/1编写 jaa 程序实现: (1)定义如下方法求一

CSAPP实验之Bomb Lab详解_csapp bomb-程序员宅基地

文章浏览阅读1.5w次,点赞32次,收藏194次。文章目录前言phase 1phase 2phase 3phase 4phase 5phase 6总结和感想前言Bomb Lab来自《深入理解计算机系统》(CSAPP)一书的第三章“程序的机器级表示”的配套实验,该实验的目的是通过反汇编可执行程序,来反推出程序执行内容,进而能够正确破解”密码“,解除“炸弹”。Bomb Lab文件目录如下:├── bomb├── bomb.c└── READMEbomb: 可执行程序,我们需要对其进行反汇编和gdb调试。bomb.c: bomb的主函数mai_csapp bomb

操作系统实验六 文件管理_操作系统文件管理实验-程序员宅基地

文章浏览阅读1.2w次,点赞24次,收藏143次。操作系统实验六 文件管理_操作系统文件管理实验