70%Java工程师都需要!如何把本地(内网)项目映射到外网

70%Java工程师都需要!如何把本地(内网)项目映射到外网
2020年12月16日 09:53 源码时代

我们在写项目时一般都是用ip就可以直接测试了。但有的业务场景需要我们用到域名。这时候我们去申请一个域名就行了,但此时我们申请的域名协议是http的不是https的。对接微信时很多情况是用的https 。且在对接微信是我们需要边对接边调试。如果直接把项目打包到服务器,调试时会很麻烦,所以这篇文章我们要讲的是“如果把本地(内网)项目以https协议的方式映射到外网”

一:首先我们先在百度百科了解一下什么是https

HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 [1] 。HTTPS 在HTTP 的基础下加入SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面

从上面我们可以得知 https比http安全一般用于支付,https的安全基础是SSL。所以我们要配置https协议的时候需要用得到SSL证书。

二 需要准备的环境

我们要做的事情是把本地的Springboot项目通过https 的方式映到外网去。

环境

  1. springBoot项目

  2. 域名 (我在阿里云购买的)

  3. SSL证明(阿里云免费申请)

  4. Ngrok 内网穿透(免费把本地的项目映射到外网)http://www.ngrok.cc/

三,流程图

1. 浏览器输入域名会访问的你申请的域名

2. 访问到底域名会解析到你申请的内网穿透的域名

3. 内网穿透访问到你本地的项目

4. 你本地项目重定向到443端口

5. 浏览器从原来的http变成https

四项目实现1.首先去阿里云弄一个免费的SSL证书

这里选择服务器类型tomcat 因为springboot内嵌了tomcat 用这种方式配置比较简单

下载后的ssl证书 放到项目里面的resource路径下

2 Springboot里直接修改 application配置文件

这里一定要注意 是 key-store 和 key-store-password 我在配置时写成了 key-password 弄了很久没找到原因

现在实现的效果是

可以用https我们的项目 但是我如果直接输入域名用http访问就访问不到。

因为http是默认80端口 而https 是默认的 443 端口。

所以我在我的启动类里面写一段代码 。访问http 是自动跳转到https

EmbeddedServletContainerFactory 可以因为你的spring boot 版本 过高没有这个class 那么你需要去你对应spring boot版本的class

public class HuahaiApplication {

public static void main(String[] args)

{

SpringApplication.run(HuahaiApplication.class, args);

}

/**

* 配置一个 TomcatServletWebServerFactory bean

* 将http 重定向到 https

* @return

*/

/**

* it's for set http url auto change to https

*/

@Bean

public EmbeddedServletContainerFactory servletContainer(){

TomcatEmbeddedServletContainerFactory tomcat=new TomcatEmbeddedServletContainerFactory(){

@Override

protected void postProcessContext(Context context) {

SecurityConstraint securityConstraint=new SecurityConstraint();

securityConstraint.setUserConstraint("CONFIDENTIAL");//confidential

SecurityCollection collection=new SecurityCollection();

collection.addPattern("/*");

securityConstraint.addCollection(collection);

context.addConstraint(securityConstraint);

}

};

tomcat.addAdditionalTomcatConnectors(httpConnector());

return tomcat;

}

//配置http转https

@Bean

public Connector httpConnector(){

Connector connector=new Connector("org.apache.coyote.http11.Http11NioProtocol");

connector.setScheme("http");

connector.setPort(80);

connector.setSecure(false);

connector.setRedirectPort(443);

return connector;

}

}

3 我可以把我本地的服务映射到外网去访问借助一个 sunny-ngrok

去域名管理中心解析你的域名

本地启动ngrok 的服务

效果

输入你的域名 不写https 也会自动跳转到https 这里是因为我刚刚在启动类里面配置了 重定向

财经自媒体联盟更多自媒体作者

新浪首页 语音播报 相关新闻 返回顶部