SpringBoot配置HTTPS,并实现HTTP访问自动转HTTPS访问
1、 使用JDK自带的keytools创建证书
打开cmd,输入如下命令:
keytool -genkey -alias tomcat -keyalg RSA -keystore ./server.keystore
复制代码
一切按照提示进行操作:
操作完成后,会在用户打开cmd的窗口生成server.keystore文件
2、 拷贝证书文件到工程根目录
将生成的server.keystore拷贝到需要支持HTTPS访问服务的根目录,然后进行配置。
在application.properties,加入下列配置:
server.port=443
server.ssl.key-store=server.keystore
server.ssl.key-alias=tomcat
server.ssl.enabled=true
server.ssl.key-store-password=123456
server.ssl.key-store-type=JKS
复制代码
注:这里将服务器端口号设置成443端口,即https的默认访问端口,那么在进行https访问的时候可以不带端口号直接访问,如果端口被占用使用,则需要解决端口占用问题了。
3、 Http访问自动转Https
在Spring Boot启动类中注入下面两个Bean,提供Https服务。
@Bean
public Connector connector(){
Connector connector=new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(80);
connector.setSecure(false);
connector.setRedirectPort(443);
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的监听端口为80端口,http默认端口,这样在访问的时候也可以不用带上端口号了,直接访问http://localhost,自动转向https://localhost