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

背景

关键字:微信小程序、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: 443
  ssl:
    # 腾讯云证书文件夹下 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 {

    @Bean
    public TomcatServletWebServerFactory servletWebServerFactory(){
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
            @Override
            protected 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
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您下载了本程序,但是该程序存在问题无法运行,那么您可以选择退款或者寻求我们的帮助(如果找我们帮助的话,是需要追加额外费用的)。另外,您不会使用资源的话(这种情况不支持退款),也可以找我们帮助(需要追加额外费用) 随着移动互联网技术的发展和用户需求的变化,【小程序名称】应运而生,以其轻量化、便捷化的设计理念为用户提供了一种全新的服务模式。作为一款无需下载安装即可使用的应用,【小程序名称】依托于微信庞大的生态系统,让用户在微信内就能轻松实现各种功能操作。 【小程序名称】的核心功能主要集中在【具体服务领域】,例如在线购物、本地生活服务、教育学习或健康管理等。它简化了传统APP繁琐的注册登录流程,支持微信一键授权登录,极大地提升了用户体验。用户通过搜索或扫描二维码,瞬间即可开启使用,享受快速加载、流畅运行的服务。 该小程序界面设计简洁明了,布局合理,易于上手。同时,其特色功能如实时更新的信息推送、个性化推荐以及社交分享功能,让用户能够及时获取所需信息,并方便地将优质内容分享至朋友圈或好友,实现信息的高效传播与互动。 【小程序名称】注重数据安全与隐私保护,严格遵守国家法律法规和微信平台的规定,确保用户数据的安全无虞。此外,其背后的开发团队持续迭代更新,根据用户反馈不断优化产品性能,提升服务质量,致力于打造一个贴近用户需求、充满活力的小程序生态。 总结来说,【小程序名称】凭借其小巧便携、快捷高效的特性,不仅节省了用户的手机存储空间,更为用户提供了无缝衔接的便利服务,是现代生活中不可或缺的一部分,真正实现了“触手可及”的智能生活新体验。只需轻点屏幕,无限精彩尽在掌握之中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值