zoukankan      html  css  js  c++  java
  • SpringBoot

    1、 生成SSL证书(使用 Java jdk 自带的工具 keytool)

    找到jdk的安装路径(注意:这里是我本地的路径...)

    ​ 假设你已经配置了 JDK的环境变量,可以 忽略这下面的这一步。

    2、输入命令生成证书

    keytool -genkeypair -alias server_https -keypass oukele -keyalg RSA -keysize 1024 -validity 365 -keystore D:/server_https.keystore -storepass oukele
    -alias 别名
    -keypass 指定生成密钥的密码
    -keyalg 指定密钥使用的加密算法(如 RSA)
    -keysize 密钥大小
    -validity 过期时间,单位:天
    -keystore 指定存储密钥的 密钥库的生成路径、名称。
    -storepass 指定访问密钥库的密码。

    有警告提示的话,根据它的提示再操作一遍即可。

    3、springboot 项目 配置 https

    server:
    # https 配置
    ssl:
    # 是否启用 ssl 支持 (默认是 true)
    #enabled: true
    # 密钥库的路径
    key-store: classpath:server_https.keystore
    # 密钥库类型
    key-store-type: JKS
    # 密钥库中密钥的别名
    key-alias: server_https
    # 用于访问密钥库中密钥的密码
    key-password: oukele
    # 用于访问密钥库的密码
    key-store-password: oukele
    # 项目访问的端口
    port: 8088
    # 用于 非ssl请求 强制转成 ssl 请求
    # 当使用 访问地址:http://127.0.0.1:8089/hello 访问时 后台会 将请求 转换成 https://127.0.0.1:8088/hello
    non-ssl-port: 8089

    server_https.keystore 存放的位置

    4、编写一个简单的测试控制类 ,启动访问进行访问

    控制类:

    进行访问结果:

     

    5、http强制跳转https

    新增一个 httpToHttpsConfig 类

    package com.oukele.https.config;
    
    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.web.embedded.tomcat.TomcatServletWebServerFactory;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * @author oukele
     * http 请求 强制跳转成 https
     */
    @Configuration
    public class HttpToHttpsConfig {
    
    
        /**
         * 项目指定的端口号
         */
        @Value("${server.port}")
        private int serverPort;
    
        /**
         * 用于 非ssl请求 强制转成 ssl 请求 的端口号
         */
        @Value("${server.non-ssl-port}")
        private int port;
    
        @Bean
        public TomcatServletWebServerFactory servletContainerFactory() {
            TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
                @Override
                protected void postProcessContext(Context context) {
                    //设置安全性约束
                    SecurityConstraint securityConstraint = new SecurityConstraint();
                    securityConstraint.setUserConstraint("CONFIDENTIAL");
                    //设置约束条件
                    SecurityCollection collection = new SecurityCollection();
                    //拦截所有请求
                    collection.addPattern("/*");
                    securityConstraint.addCollection(collection);
                    context.addConstraint(securityConstraint);
                }
            };
            Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
            //设置将分配给通过此连接器接收到的请求的方案
            connector.setScheme("http");
    
            //true: http使用http, https使用https;
            //false: http重定向到https;
            connector.setSecure(false);
    
            //设置监听请求的端口号,这个端口不能其他已经在使用的端口重复,否则会报错
            connector.setPort(port);
    
            //重定向端口号(非SSL到SSL)
            connector.setRedirectPort(serverPort);
    
            tomcat.addAdditionalTomcatConnectors(connector);
            return tomcat;
        }
    }
    View Code

    重新启动项目,进行访问

    例如 浏览器输入 http://127.0.0.1:8089/hello , 项目会自动将 该请求 转换成 https://127.0.0.1:8088/hello 请求。


    源码地址:https://gitee.com/oukele/springboot-demo/tree/master/https

  • 相关阅读:
    使用npoi做excel导出真心方便
    JAVA泛型(代码级解释)
    数据库战略高度解析(4) JDBCODBC
    [Python] 函数lambda(), filter(), map(), reduce()
    JEECG引领新的开发模式,让开发更加专注于业务!
    Parse 是什么
    Openflashchart及代理类设计介绍
    数据库战略高度解析(3) ODBC
    java 中paint .repaint.update
    svn利用钩子脚本功能实现代码同步到web目录
  • 原文地址:https://www.cnblogs.com/oukele/p/14184469.html
Copyright © 2011-2022 走看看