• SpringBoot配置https


    1.Https配置

    由于HTTPS具有良好的安全性,在开发中得到了越来越广泛的应用,像微信公众号、小程序等的开发都要使用HTTPS来完成。对于个人开发者而言,一个HTTPS 证书的价格还是有点贵,但是呢,国内的一些云服务器厂商提供免费的HTTPS证书,一个账号可以申请数个,当然,在jdk中提供了一个Java数字证书,我可以也可以利用这个工具生成一个数字证书。

    1.1 申请证书

    申请证书的方式有两种:

    • 1.申请免费的阿里云证书
    • 2.利用jdk工具生成证书

    1.1.1 申请免费的阿里云证书

    但是这个要求用户有域名,没有域名的可以选择自行跳过这种方法了。

    进入阿里云官网,搜索ssl
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    接下来点击证书申请
    在这里插入图片描述

    点击下一步,会有DNS校验,你只需要按照他的提示进行相应的校验即可,因为我的域名也过期了,等弄好之后在更新本小节,下面重点讲一下如何利用jdk去生成证书。

    1.1.2 利用jdk生成证书

    在cmd中输入:

    keytool -genkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore sang.p12 -validity 365
    
    • 1

    在这里插入图片描述

    密钥口令自己随便输一个,比如:123456

    • genkey表示要创建一个新的密钥。
    • alias表示keystore的别名。
    • keyalg表示使用的加密算法是RSA,一种非对称加密算法。
    • keysize表示密钥的长度。
    • keystore表示生成的密钥存放位置。
    • validity表示密钥的有效时间,单位为天。

    以上 指令执行成功以后 会在当前目录下生成一个sang.p12的文件
    在这里插入图片描述

    2.项目配置

    然后将这个文件复制到resource根目录
    在这里插入图片描述

    然后在application.properties中下做以下配置

    # key-store表示密钥文件名。
    server.ssl.key-store=classpath:sang.p12 
    # key-alias表示密钥别名。
    server.ssl.key-alias=tomcathttps
    #key-store-password 就是在cmd命令执行过程中输入的密码。
    server.ssl.key-store-password=123456
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    配置好以上信息之后,可以启动项目访问:http://localhost:8080
    在这里插入图片描述

    此时,如果以 HTTP 的方式访问接口,就会访问失败,但是如果我们改成访问:https://localhost:8080/
    在这里插入图片描述

    可以看到访问没有任何问题了,这样的话我们的后端服务就只支持https的请求访问了。

    当然了,如果你还想让项目既支持https请求也支持http请求,可以通过配置重定向的方式,因为 Spring Boot 不支持同时在配置中启动 HTTP HTTPS。

    配置方式如下:

    mport 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;
    
    @Configuration
    public class TomcatConfig {
        @Bean
        TomcatServletWebServerFactory tomcatServletWebServerFactory() {
            TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory() {
                @Override
                protected void postProcessContext(Context context) {
                    SecurityConstraint constraint = new SecurityConstraint();
                    constraint.setUserConstraint("CONFIDENTIAL");
                    SecurityCollection collection = new SecurityCollection();
                    collection.addPattern("/*");
                    constraint.addCollection(collection);
                    context.addConstraint(constraint);
                }
            };
            factory.addAdditionalTomcatConnectors(createTomcatConnector());
            return factory;
        }
    
        private Connector createTomcatConnector() {
            Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
            connector.setScheme("http");
            connector.setPort(8082);
            connector.setSecure(false);
            connector.setRedirectPort(8080);
            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

    相当于我们一个服务同时启动了两个端口,即:8080,,8082,如果我们通过http的方式去访问8082,那么就会重定向到https请求的8080

    至此,我们将后端的服务改造为https就结束了。

  • 相关阅读:
    2022-04-10-Docker
    Kafka集群一键启动、一键关闭
    SpringCloud微服务:Nacos快速入门
    LLM 05-大模型法律
    c#中的扩展方法
    数据结构——优先级队列(堆)
    回归预测模型:MATLAB神经网络回归模型
    c语言入门---预处理
    饥饿游戏搜索算法(HGS)(含java实现代码)
    Java代码隐患之——Arrays.asList
  • 原文地址:https://blog.csdn.net/zhiyikeji/article/details/127988070