背景

关键字:微信小程序、SpringBoot 项目、腾讯云服务器、SSL、HTTPS、Tomcat

注:本文记录了一个菜鸟解决问题的思路,觉得啰嗦可以略过,解决方案在文末。技术不精,文章有错误烦请指正。

最近想着做个小程序,后端使用 SpringBoot,直接跑在腾讯云服务器上。微信小程序要求配置指定的通信域名,意思是只能访问特定的服务器和接口。最关键的是这个域名需要使用 HTTPS 协议。配置 SSL 证书也不难,腾讯云上提供了免费的证书提供商,也提供了几种配置 SSL 证书的方法,比如使用 NGINX、Tomcat、Apache 等。

问题出在如果想要使用 HTTPS 协议访问启动的 SpringBoot 项目就有点困难,因为如果使用 NGINX 和 Apache 配置 SSL 证书的话,HTTP 跑在 80 端口,HTTPS 跑在 443 端口,而 SpringBoot 项目跑在默认的 8080 端口。这样配置的结果是,可以使用 HTTPS 协议访问域名,但是只能访问默认的 443 端口,无法访问 8080 端口。使用 HTTP 协议可以访问到 8080 端口。

解决过程

迷茫开头

最初没有想明白各个端口的作用,单纯地觉得,只要 443 端口开放,并且配置了 SSL 证书,就可以通过 HTTPS 协议访问该域名下的所有资源。于是问题自然拆解成了两个:开放 443 端口,配置 SSL 证书。

配置 SSL 证书腾讯云上有教过,我三种都尝试了下,而且不止一遍。

开放 443 端口也是在腾讯云上操作,点击配置就可以。

二者操作完成后,出现了上述的结果。于是从 NGINX 换到 Apache。再试,都不成功。后面开始怀疑是不是服务器的 443 端口有问题,联系了客服,但是没理我。

偏转过程

出问题了肯定要搜索。记录下每次搜索的关键字即可。

SSL 证书如何配置?

443 端口打不开怎么办?

HTTP 能访问到的资源 HTTPS 访问不到怎么办?

配置了 SSL 但是无法使用 HTTPS 访问怎么办?

这些关键词搜索出来的文章真的是一言难尽,十几篇文章同一个回答就不说了,老问题了;题目是 HTTP 能访问到的资源 HTTPS 访问不到怎么办,回答是把 S 去掉。让人很难相信是技术人员写的文章。

搜索了好几天基本都是无用功,每天都在原点徘徊。

误打误撞

突然意识到,HTTPS 协议可以使用, 443 端口开放,而且 SpringBoot 内置了 Tomcat,可以用 Tomcat 配置 SSL 证书,项目运行在 443 端口,之后再使用 HTTPS 协议就可以直接访问到项目。

搜索到 Spring Boot 使用SSL-HTTPS - 知乎 (zhihu.com),解决了本次问题。

思考

个人问题

  • 计算机网络学的云里雾里,对端口的理解不够(包括现在)。很多理论知识没有实践过。
  • 项目经历比较少,没有过独自从 0 搭建项目的经验。
  • debug 能力有待长进,搜索问题很难定位到问题的根源所在。

外部问题

  • 部分论坛的部分作者水平极低,不仅仅是技术水平,且抄袭泛滥。

解决方案

application.yml

server:# 监听端口port: 443ssl:# 腾讯云证书文件夹下 Tomcat 文件夹下key-store: classpath:lvshui5u.com.jks# Java 密钥库格式key-store-type: JKS# 密码,一般在请求证书时有配置过key-store-password: xxxxxx

配置到这里就可以实现 HTTPS 协议访问到 lvshui5u.com:443(端口默认可省略) 下的资源和接口,可以使用下述代码配置 HTTP 协议访问 lvshui5u.com:8080。

TomcatHttpConfig.java

package com.lvshui5u.hellolvshui5u.config;import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
import org.apache.tomcat.util.descriptor.web.SecurityCollection;
import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @author: lvshui5u* @date: 2021/10/11 23:14* @describe:*/
@Configuration
public class TomcatHttpConfig {@Beanpublic TomcatServletWebServerFactory servletWebServerFactory(){TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {@Overrideprotected void postProcessContext(Context context) {SecurityConstraint securityConstraint = new SecurityConstraint();securityConstraint.setUserConstraint("CONFIDENTIAL");SecurityCollection securityCollection = new SecurityCollection();securityCollection.addPattern("/*");securityConstraint.addCollection(securityCollection);context.addConstraint(securityConstraint);}};// 额外添加一个连接tomcat.addAdditionalTomcatConnectors(initiateHttpConnector());return tomcat;}private Connector initiateHttpConnector(){Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");// 协议connector.setScheme("http");// 端口connector.setPort(8080);connector.setSecure(false);// 端口转发connector.setRedirectPort(443);return connector;}
}

配置到此,项目中资源有两种访问方式

https://www.lvshui5u.com:443/xxx (443 端口可省略)
http://www.lvshui5u.com:8080/xxx

微信小程序以SpringBoot作为后端开发遇到的问题及解决思路总结相关推荐

  1. 【微信小程序】java游戏后端开发

    数据库 1. MySQL 索引使用有哪些注意事项呢? 可以从三个维度回答这个问题:索引哪些情况会失效,索引不适合哪些场景,索引规则 索引哪些情况会失效 查询条件包含or,可能导致索引失效 如何字段类型 ...

  2. 毕业季基于spring的基于安卓APP的基于ssm框架的基于微信小程序的管理系统设计与开发(开题+源码+讲解+论文)

    毕业设计考察的是同学的专业知识的运用能力,除了对技能的考核,还看重你的创新思维,这里面设计到内容繁琐复杂. 对于还未毕业没有过项目开发经验的同学是有些难度的,一个程序的开发小到1两个月,大至几个月甚至 ...

  3. 微信小程序结合SpringBoot实现WebSocket长链接

    微信小程序结合SpringBoot实现WebSocket长链接 引入 WebSocket 微信小程序部分实现 js部分 页面部分 后端SpringBoot实现 WebSocketConfig.java ...

  4. 【项目实战课】微信小程序图像识别模型前后端部署实战

    欢迎大家来到我们的项目实战课,本期内容是<微信小程序图像识别模型前后端部署实战>.所谓项目实战课,就是以简单的原理回顾+详细的项目实战的模式,针对具体的某一个主题,进行代码级的实战讲解. ...

  5. 小程序开发语言python_微信小程序是用什么语言开发的呢

    原标题:微信小程序是用什么语言开发的呢 说到微信小程序可能大部分只是一知半解,您是否清楚小程序是用什么来开发的?如果您不太清楚,那么多美源小程序小编来告诉您小程序开的具体. 微信小程序是什么语言开发的 ...

  6. 微信小程序服务器端用什么语言开发?

    点击阅读原文  微信小程序服务器端用什么语言开发? 首先,比如微信二次开发,可以用java或者php 来做服务器端语言来进行二次开发,那小程序呢?文档写着.js负责业务逻辑,难道服务器端就是纯JS实现 ...

  7. 基于微信小程序的springboot客运汽车票购票系统源码和论文

    在客运公司工作 7 年之余,对客运管理的难度深有感触.特别是在春运期 间购票难依旧是长途汽车订票的一大难题.长途汽车和火车的订票管理虽然有 差异,但大体上是相同的.长途汽车在售票的过程中需要对旅客的起 ...

  8. php 类似微信下拉菜单,微信小程序模拟下拉菜单开发实例

    本文主要和大家分享微信小程序模拟下拉菜单开发实例,希望能帮助到大家. 一.知识点 1.实现动态显示和隐藏某个控件 列表1data:{ open:false }, showitem:function() ...

  9. 微信小程序使用真机或开发工具进行http请求开发测试亲测有效

    微信小程序使用真机或开发工具进行http请求开发测试 1使用微信开发这工具进行http请求的配置 2:真机进行http请求 微信开发这平台要求上线微信小程序配置的合法域以及网络请求名必须是https, ...

最新文章

  1. 在leangoo里怎么创建看板,更改看板名称?
  2. H3C设备之RIP v2认证
  3. 着手一个手游项目的思考
  4. Java 基础 之 关系运算符
  5. MATLAB化坐标系(转载的)
  6. oracle表空间最大30G?如果一张表超过30G怎么办
  7. Part 2 – Deep analysis using Androguard tools
  8. Actor IM 中 WebRTC的设定
  9. centos7 redis5.0以后版本 集群部署示例
  10. Android: AndroidStudio使用OpenCV-Java
  11. go基本数据类型与运算符
  12. phpthink验证旧密码_忘记MacBook密码解决方法
  13. psp记忆棒测试软件,PSP记忆棒有问题?修复软件MS-Format帮你解忧
  14. 统计学中sp_统计学中pssp是什么意思
  15. 计算机课程教学调查问卷,计算机基础课程调查问卷
  16. C#导出VCF格式电话本,遇到QUOTED-PRINTABLE编码的问题,附带QUOTED-PRINTABLE编码解码
  17. 造车失败后投身机器人和AI,我笑戴森太疯癫,戴森笑我看不穿
  18. srand和rand详细讲解
  19. 盘点在未来,或许会被人工智能机器人取代的10种职业
  20. 讲解MySQL最详细的一步一步安装教程

热门文章

  1. useful words in the work
  2. Google Play In-app Billing 踩过的那些坑
  3. Git 从入坑到放不下
  4. 使用大数据去挖掘每个用户的客户价值-RFM
  5. C语言报错:error: expected ‘while’ at end of input } ^
  6. 考大学计算机考试作文,考试作文
  7. 关于法向加速度(向心加速度)中的“法“
  8. 网络传播时延(propagation delay)与传输时延(transmission delay)
  9. PhotoshopCS6学习笔记
  10. 世界各国国土面积排名