我是靠谱客的博主 兴奋水杯,最近开发中收集的这篇文章主要介绍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,隧道配置完成

最后

以上就是兴奋水杯为你收集整理的spring实现druid使用ssh连接数据库的全部内容,希望文章能够帮你解决spring实现druid使用ssh连接数据库所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部