概述
在开发过程中,由于数据安全管理需要,mysql等重要数据库往往只允许主机后内网地址访问,程序连接时只能用ssh连接,以下为spring框中ssh连接mysql思路与方案
1.引入ssh代理jar
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.55</version>
</dependency>
2.重载BeanPostProcessor类,在druid连接数据库前设置ssh隧道,druid连接时使用ssh隧道进行mysql连接。注意spring框架中初始化化com.alibaba.druid.pool.DruidDataSource前,程序将进行mysql连接初始化,将要在初始化前设置ssh隧道;
3.设置ssh隧道,先查询druid连接数据的bean名字
示例中连接msyql的配置文件bean名字为dataSource_jeecg
在程序中新BeanPostProcessor类
package com.jeecg.commons.web;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
@Component
public class MyBeanPostProcessor implements BeanPostProcessor{
/*
* 本方法一定要返回bean对象
*/
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if("dataSource_jeecg".equals(beanName)) {
System.out.println(beanName+"对象初始化前...");
ssh();
}
return bean;
}
/*
* 本方法一定要返回bean对象
*/
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
//本地端口,对应jdbc:mysql://localhost:3306/abc?useUnicode=true&characterEncoding=UTF-8中的3306
public static final int lmport=3306;
public static final int rmport=3306;//mysql端口
public static String rhost="192.168.158.1";//服务器host
public static int rport=22;//服务器ssh的port
public static String rusername="root";//服务器username
public static String rpassword="abcde";//服务器password
/**
* 配置SSH
*/
public static void ssh() {
try {
JSch jsch = new JSch();
Session session = jsch.getSession(rusername, rhost, rport);
session.setPassword(rpassword);
session.setConfig("StrictHostKeyChecking", "no");
session.connect();
System.out.println(session.getServerVersion());//这里打印SSH服务器版本信息
int assinged_port = session.setPortForwardingL(lmport, rhost, rmport);//端口映射 转发 数据库服务器地址url
System.out.println("localhost:" + assinged_port);
} catch (Exception e) {
e.printStackTrace();
}
}
}
4.mysql配置改为jdbc:mysql://localhost:3306/abc?useUnicode=true&characterEncoding=UTF-8,隧道配置完成
最后
以上就是兴奋水杯为你收集整理的spring实现druid使用ssh连接数据库的全部内容,希望文章能够帮你解决spring实现druid使用ssh连接数据库所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复