在开发过程中,我们经常会遇到联调、测试、找bug等问题,由于项目在不同的环境,我们找问题也非常不方便,无法通过本地代码debug调试。在公司内部的局域网内,通过浏览器中ModHeader修改请求参数,代理、重定向等方式可以方便不少,但还是无法解决跨网段的问题。
以下是ModHeader的代理界面,很友好的帮助我们代理,可以添加多种前端请求参数,具有PostMan的要求,请自行实践。
2、SpringBoot通过跳板机连接远程
(1)导入依赖包
<!--ssh链接跳板机-->
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.55</version>
</dependency>
(2)在resource目录下创建一个application.properties参数文件,自定义远程路径配置
#ssh配置
ssh.remote.enabled=1
#SSH跳板机地址
ssh.remote.host=10.0.98.51
#SSH跳板机端口
ssh.remote.port=22
#SSH跳板机用户名
ssh.remote.username=unicom
#SSH跳板机密码
ssh.remote.password=NewUni#Com@2020
#绑定的本地地址
ssh.local.resource_host=127.0.0.1
#绑定的本地端口
ssh.local.resource_port=9875
#正向代理的远程地址
ssh.remote.target_host=172.16.33.11
#正向代理的远程端口
ssh.remote.target_port=80
(3)创建shh的工具类SshConfiguration ,建立连接
package cn.unicom.config;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.web.servlet.ServletContextInitializer;
import org.springframework.stereotype.Component;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import java.io.IOException;
import java.util.Properties;
@Component
@Slf4j
public class SshConfiguration implements ServletContextInitializer {
private static Session session;
/**
* 初始化
*/
public SshConfiguration() {
try {
Properties p = new Properties();
p.load(getClass().getResourceAsStream("/application.properties" ));
//如果配置文件包含ssh.forward.enabled属性,则使用ssh转发
if (p.getProperty("ssh.remote.enabled" ) != null) {
Session session = new JSch().getSession(p.getProperty("ssh.remote.username" ), p.getProperty("ssh.remote.host" ), Integer.valueOf(p.getProperty("ssh.remote.port" )));
session.setConfig("StrictHostKeyChecking" , "no" );
session.setPassword(p.getProperty("ssh.remote.password" ));
session.connect();
//将本地44339端口的请求转发到目标地址的端口
session.setPortForwardingL(p.getProperty("ssh.local.resource_host" ), Integer.valueOf(p.getProperty("ssh.local.resource_port" )), p.getProperty("ssh.remote.target_host" ), Integer.valueOf(p.getProperty("ssh.remote.target_port" )));
} else {
log.info("ssh forward is closed." );
}
} catch (IOException e) {
log.error("ssh IOException failed." , e);
} catch (JSchException e) {
log.error("ssh JSchException failed." , e);
} catch (Exception e) {
log.error("ssh settings is failed. skip!" , e);
}
}
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
}
/**
* 断开SSH连接
*/
public void destroy() {
this.session.disconnect();
}
}
(4)修改yml文件中数据库连接中的 url地址与端口
datasource:
hikari:
auto-commit: true
connection-test-query: SELECT 1
connection-timeout: 30000
idle-timeout: 180000
max-lifetime: 1800000
minimum-idle: 5
maximum-pool-size: 100
pool-name: "HikariCP"
driverClassName: com.mysql.cj.jdbc.Driver
username: ENC(WmGteHIUcNNXF4FJ9qrPUw==)
password: ENC(if9oR9N7HjAgmX/u3aZNDRqe3zwvk9sC)
type: com.zaxxer.hikari.HikariDataSource
url: jdbc:mysql://localhost:3307/生产库?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
这样就可以直接连接到生产环境了,对生产环境的数据库可以进行操作了。
切记:
谨慎!谨慎!谨慎!连接成功后,错误的操作会对生产环境造成致命的错误,需要谨慎!