springboot配置https访问

1.首先去腾讯云或者阿里云申请免费ssl证书,以腾讯云为例,不建议自己生成,因为没办法测试发布环境的效果,填写个人信息,最后提示审核中才是申请成功,审核比较快,半小时就通过了。

 

2.下载已经通过审核的证书文件夹,解压文件如下,根据项目选择使用,

 

3.因为springboot使用的是内置tomcat,所以我这边选择tomcat文件,在resources目录下导入xxx.jks

 

4.接下来配置properties文件,密码在同文件夹的keystorePass.txt中(腾讯云)

 

5.个人比较喜欢yml格式,简洁直观(阿里云)

 

6.到这个时候基本配置完成,但不能使用https后就通知所有人重新保存网址,这时候就需要增加请求转发,自动从http转到https

   写法一:在启动类也就是@SpringBootApplication注解类中加上使用

/**
* http重定向到https
* @return
*/
@Bean
public TomcatServletWebServerFactory 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(httpConnector());
return tomcat;
}

@Bean
public Connector httpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
//Connector监听的http的默认端口号
connector.setPort(8080);
connector.setSecure(false);
//监听到http的端口号后转向到的https的端口号,也就是项目配置的port
connector.setRedirectPort(8089);
return connector;
}
写法二:另外新建一个配置类,加上@Configuration注解声明

@Configuration
public class TomcatConfig {
@Bean
TomcatEmbeddedServletContainerFactory tomcatEmbeddedServletContainerFactory() {
TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory(){
@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(5001);
connector.setSecure(false);
connector.setRedirectPort(443);
return connector;
}
}
7.现在可以通过https://域名:8089/index访问,这样就看到熟悉的小锁了

 

8.通过域名访问失败原因及解决办法

域名未配置解析,去域名管理配置解析,10分钟后通过ping 域名看是否显示ip,显示则解析成功!
域名未认证,去域名管理上传个人信息进行域名实名!
域名已实名但未网站未备案,解决办法
去进行网站实名,使用腾讯云小程序认证进行icp备案即可!
可以通过域名访问但必须加上自定义端口才行,不能使用8080或443等默认端口,否则提示连接已重置!
————————————————
版权声明:本文为CSDN博主「clmm123」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/baidu_37302589/article/details/100692957

posted on 2021-04-27 10:46  德邦总管  阅读(737)  评论(0编辑  收藏  举报

导航