当前位置:   article > 正文

微信小程序以SpringBoot作为后端开发遇到的问题及解决思路总结_基于springboot微信小程序关键技术重难点

基于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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

配置到这里就可以实现 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;
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

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

https://www.lvshui5u.com:443/xxx (443 端口可省略)
http://www.lvshui5u.com:8080/xxx
  • 1
  • 2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/209777
推荐阅读
相关标签
  

闽ICP备14008679号