首先让我们看一下什么是HTTPS
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。
我们需要什么东西呢?
加密的数字证书
这个可以购买,国内某某服务器厂商就有。(富人版本)
下面是穷学生版:
使用keytool工具生成一个数字证书
keytool工具就在jdk的bin目录下
在cmd中执行命令:
keytool -genkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore sang.p12 -validity 365
命令解释:
-genkey 表示要创建一个新的密匙
-alias 表示keystore的别名
-keysize表示密匙的长度
-keystore 表示生成的密匙存放位置
-validity 表示密匙的有效时间,单位为天
根据提示完成后续操作。
命令执行完毕后,会在执行命令的目录下生成一个名为sang.p12的文件,将该文件复制到项目的根目录下,和pom.xml同级
在application.properties中做如下配置:
#密匙文件名
server.ssl.key-store=sang.p12
#表示密匙别名
server.ssl.key-alias=tomcathttps
server.ssl.key-store-password=123456
运行项目
此时,在用HTTP访问接口,就会访问失败。
Springboot不支持同事在配置中启动HTTP和HTTPS。这个时候可以配置请求重定向,将HTTP请求重定向为HTTPS请求。配置方式如下:
@Configuration
public class TomcatConfig {
@Bean
public Connector connector(){
Connector connector=new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(8080);
connector.setSecure(false);
connector.setRedirectPort(8081);
return connector;
}
@Bean
public TomcatServletWebServerFactory tomcatServletWebServerFactory(Connector connector){
TomcatServletWebServerFactory tomcat=new TomcatServletWebServerFactory(){
//@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint=new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection=new SecurityCollection();
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
tomcat.addAdditionalTomcatConnectors(connector);
return tomcat;
}
}
将HTTP的8080端口自动重定向到HTTPS的8081端口
参考书:Springboot+Vue全栈开发实战
在B站看尚硅谷的课,拿这个当参考书,学点技术,准备实习去。