1、获取SSL证书
正式项目可以购买或者申请免费ssl证书,测试项目可以使用cmd自行生成ssl证书。
keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650
输入密码和证书信息后,会在cmd工作目录自动生成证书文件。
2、修改配置文件
将证书文件放到resources文件夹下,然后修改配置文件。
#服务端口
server.port=8443
#http端口
server.port.http=8080
#ssl证书路径,classpath:指项目resources目录,若放到项目根目录,则去掉classpath:
server.ssl.key-store=classpath:keystore.p12
#ssl证书信息
server.ssl.key-store-password=123456
server.ssl.keyStoreType=PKCS12
server.ssl.keyAlias=tomcat
3、实现HTTP自动跳转到HTTPS
添加下面的Tomcat容器配置类,使用的SpringBoot版本为2.0.0.RELEASE
(在之前版本中使用TomcatEmbeddedServletContainerFactory
)。
@Configuration
public class HttpsConfig {
/**
* http端口
*/
@Value("${server.port.http:8080}")
private int httpPort;
/**
* 服务端口
*/
@Value("${server.port:8443}")
private int serverPort;
@Bean
public TomcatServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityCollection collection = new SecurityCollection();
// 添加下面一行代码,可以实现http和https同时访问,但是http无法重定向到https
// 如果注释该行代码,http可以重定向到https,但是所有请求都会变成get请求
// collection.addMethod("post");
collection.addPattern("/*");
SecurityConstraint constraint = new SecurityConstraint();
constraint.setUserConstraint("CONFIDENTIAL");
constraint.addCollection(collection);
context.addConstraint(constraint);
}
};
factory.addAdditionalTomcatConnectors(httpConnector());
return factory;
}
@Bean
public Connector httpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(httpPort);
connector.setSecure(false);
connector.setRedirectPort(serverPort);
return connector;
}
}
重启服务即可,点此查看部分代码。
网友评论