SpringBoot HTTPS配置

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;
    }
}

重启服务即可,点此查看部分代码。

参考

  • http://blog.csdn.net/u012702547/article/details/53790722

你可能感兴趣的:(SpringBoot HTTPS配置)