2021年4月1日 腾讯云 cvm 跑springboot 2.3.7 配置https证书并支持http

我的需求

我想要到达到的效果是

1.强制https访问
访问主页时,即使访问链接带http而不带https,也会自动跳到https

2.80端口自动转发到443端口
我的项目是单应用部署,直接java -jar来跑的,服务器不挂nginx或者tomcat ,并且做了域名解析,网址映射的是默认的80端口

所以我要做的是 先想让springboot项目监听443端口,然后加载证书,然后https的请求就能正常访问了
然后想办法让所有通过80端口的请求引流到443端口

1.在腾讯云申请证书并下载证书

在这里插入图片描述
在这里插入图片描述

2.复制证书并配置application.yml

把 证书文件里面的 xxx.com.jks 复制到 项目resources目录里

server:
  port: 443
  ssl:
    key-store: classpath:xxx.com.jks #你resources下的jks文件的文件名
    key-store-password: 123456 #你keystorePass.txt里面的密码
    key-store-type: JKS

3.写一个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.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class HttpsConfig {

    @Bean
    public ServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = 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);
            }
        };
        tomcat.addAdditionalTomcatConnectors(createHTTPConnector());
        return tomcat;
    }

    private Connector createHTTPConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setSecure(false);
        //http 端口 访问80端口 就引导到 443
        connector.setPort(80);
        connector.setRedirectPort(443);
        return connector;
    }

}

4.其他

我的域名 xxx.com 和 www.xxx.com 都申请了证书
最后部署的时候用的是 xxx.com的证书
但不知道 www.xxx.com的证书有什么用 以及能不能正常部署,暂时不管了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值