springboot实现https
前言
Tomcat本身可以通过配置server.xml来实现对https的支持,而对于使用内嵌Tomcat的springboot工程来说,只要进行对server的配置就可以轻轻松松实现这一点。
使用方法
首先,在云服务中支持https,要和提供商要到域名对应的jks文件和密码。jks文件中含有域名对应的证书。
接着就是在配置文件中进行简单的配置:
server.ssl.key-password = 密码
//这里要写绝对路径,不然找不到
server.ssl.key-store = /home/msspoper/csc/static/tomcat.jks
server.ssl.key-store-type = JKS
server.ssl.key-store-password = 密码
这样配置就完成了。
同时要在pom文件中增加一个插件,不然会报错
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration><encoding>UTF-8</encoding>
<!-- 过滤后缀为pem、pfx的证书文件 -->
<nonFilteredFileExtensions>
<nonFilteredFileExtension>keystore</nonFilteredFileExtension>
<nonFilteredFileExtension>pem</nonFilteredFileExtension>
<nonFilteredFileExtension>pfx</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
同时支持http和https
有时候可能会遇到这样的需求,虽然我还没遇到。解决的办法也很简单,只需要配置两个bean。
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory tomcat = 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);
}
};
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(9602);
connector.setSecure(false);
//监听到http的端口号后转向到的https的端口号
connector.setRedirectPort(9603);
return connector;
}