spring实现druid使用ssh连接数据库

在开发过程中,由于数据安全管理需要,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,隧道配置完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值