`

spring boot进行开启SSL安全验证(application.properties不能配置两个端口)

 
阅读更多
1)开启SSL(HTTPS)
默认SpringBoot启动8080端口的HTTP服务,通过以下配置可以开启8443端口的HTTPS服务。
src/main/resources/application.properties
server.port=8443 
server.ssl.key-store=keystore.p12 
server.ssl.key-store-password=password 
server.ssl.keyStoreType=PKCS12 
server.ssl.keyAlias=tomcat


但是Spring Boot不支持通过application.properties同时支持HTTP和HTTPS。
可以通过在application.properties中设置HTTPS,在代码中添加Connector支持HTTP来实现。

import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
import org.apache.tomcat.util.descriptor.web.SecurityCollection;
import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;

/**
 * https配置
 *
 */
@Configuration
public class SSLConfig {

    @Value("${server.ssl.urls}")
    String urls;
    @Value("${server.non-ssl-port}")
    int port;
    @Value("${server.port}")
    int sslPort;
    // 配置8080端口服务
    @Bean
    public EmbeddedServletContainerFactory servletContainer(Connector httpConnector) {
        TomcatEmbeddedServletContainerFactory container = new TomcatEmbeddedServletContainerFactory() {
            @Override
            protected void postProcessContext(Context context) {
                SecurityConstraint constraint = new SecurityConstraint();
                constraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection collection = new SecurityCollection();
                if(!StringUtils.isEmpty(urls)) {
                    String[] urlArr = urls.split(",");
                    for(String url : urlArr) {
                        collection.addPattern(url);
                    }
                }
                constraint.addCollection(collection);
                context.addConstraint(constraint);
            }
        };
        container.addAdditionalTomcatConnectors(httpConnector);
        return container;
    }

    @Bean
    public Connector httpConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(port);
        connector.setSecure(false);
        // 跳转到SSL验证
        connector.setRedirectPort(sslPort);
        return connector;
    }
}



分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

Global site tag (gtag.js) - Google Analytics