玖叶教程网

前端编程开发入门

springboot配置https以及http重定向

因业务需求,需要将 htpp 请求转为 https 请求,这里需要 ssl 证书,证书的获取可以借助 jdk 自带的 keytool 工具生成。

原文地址:

https://www.cnblogs.com/notchangeworld/p/12669148.html
https://www.cnblogs.com/atomgame/p/12410985.html

一、生成 ssl 证书

进入 jdk 的 bin 目录,可以看到 keytool 工具


然后在该目录下打开 cmd ,输入命令:

windows 平台:

keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 365

linux平台:

keytool -genkey -alias tomcat -keyalg RSA -validity 20000 -keystore keystore.p12

参数说明:

-alias 你的证书别名

-keyalg 密钥算法

-keystore 证书库文件保存的位置和文件名

-keysize 密钥长度

-validity 证书有效期天数

生成的证书就在 bin 目录下



二、将生成的keystore.p12文件放到项目的 resources 目录下:



三、配置application.properties / application.yml 文件

#ssl证书
server.ssl.key-store=classpath:keystore.p12
server.ssl.key-store-password=******
server.ssl.key-store-type=PKCS12
server.ssl.key-alias=tomcat

如果 chrome 不可以访问

那么在配置里再加一条配置信息

server.ssl.ciphers=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,SSL_RSA_WITH_RC4_128_SHA



这时就可以发送 https 请求了

此外因为Spring Boot不支持同时在配置中启动http和https。这个时候可以配置请求重定向,将http请求重定向为https请求。配置如下:

@Configuration
public class TomcatConfig {
    @Bean
    TomcatServletWebServerFactory tomcatServletWebServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory() {
            @Override
            protected void postProcessContext(Context context) {
                // TODO Auto-generated method stub
                SecurityConstraint constraint = new SecurityConstraint();
                constraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection collection = new SecurityCollection();
                collection.addPattern("/");
                constraint.addCollection(collection);
                context.addConstraint(constraint);
            }            
        };
        
        factory.addAdditionalTomcatConnectors(createTomcatConnector());
        return factory;        
        
    }
    
    private Connector createTomcatConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(80);
        connector.setSecure(false);
        connector.setRedirectPort(8080);
        return connector;
    }
}

这里首先配置一个TomcatServletWebServerFactory,然后添加一个Tomcat中的Connector(监听80端口),并将请求转发到8080上去.

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言