springboot应用支持https实现

一 jdk自带证书生成

        切换到jdk目录下bin目录,执行

        keytool -genkey -alias (别名) -dname "CN=(姓名),OU=(组织单位名称),O=(组织名称),L=(城市名称),ST=(省),C=(国家)" -storetype (密钥仓库类型) -keyalg (生证书的算法名称) -keysize (密钥长度,证书大小) -keystore (指定生成证书的位置和证书名称) -validity (证书有效期,天单位)

列:keytool -genkey -alias lyc -dname "CN=l,OU=SC,O=yd,L=lc,ST=sc,C=CN" -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 365

二 配置https协议

        

       

springboot+tomcat,增加代码configuration配置项如下:

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.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class TomcatHttpsConfig {

    @Bean
    public Connector connector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setSecure(false);
        connector.setPort(80);
        connector.setRedirectPort(443);
        return connector;
    }

    @Bean
    public TomcatServletWebServerFactory tomcatServletWebServerFactory(Connector connector) {
        TomcatServletWebServerFactory webServerFactory = new TomcatServletWebServerFactory() {
            @Override
            protected void postProcessContext(Context context) {
                SecurityConstraint securityConstraint = new SecurityConstraint();
                securityConstraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection securityCollection = new SecurityCollection();
                securityCollection.addPattern("/*");
                securityConstraint.addCollection(securityCollection);
                context.addConstraint(securityConstraint);
            }
        };
        webServerFactory.addAdditionalTomcatConnectors(connector);
        return webServerFactory;
    }

}

springboot+undertow,增加代码configuration配置项如下:

import io.undertow.Undertow;
import io.undertow.UndertowOptions;
import io.undertow.servlet.api.SecurityConstraint;
import io.undertow.servlet.api.SecurityInfo;
import io.undertow.servlet.api.TransportGuaranteeType;
import io.undertow.servlet.api.WebResourceCollection;
import org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;

public class UndertowHttpsConfig {
    private int httpPort = 80;
    private int httpsPort = 443;

    @Bean
    public ServletWebServerFactory undertowFactory() {
        UndertowServletWebServerFactory undertowFactory = new UndertowServletWebServerFactory();
        undertowFactory.addBuilderCustomizers((Undertow.Builder builder) -> {
            builder.addHttpListener(httpPort, "0.0.0.0");
            // 开启HTTP2
            builder.setServerOption(UndertowOptions.ENABLE_HTTP2, true);
        });
        undertowFactory.addDeploymentInfoCustomizers(deploymentInfo -> {
            // 开启HTTP自动跳转至HTTPS
            deploymentInfo.addSecurityConstraint(new SecurityConstraint()
                    .addWebResourceCollection(new WebResourceCollection().addUrlPattern("/*"))
                    .setTransportGuaranteeType(TransportGuaranteeType.CONFIDENTIAL)
                    .setEmptyRoleSemantic(SecurityInfo.EmptyRoleSemantic.PERMIT))
                    .setConfidentialPortManager(exchange -> httpsPort);
        });
        return undertowFactory;
    }
}

完成以上配置之后,启动项目,访问:https://localhost:443/test/test实现springboot的https协议访问

相关推荐

  1. springboot设置RestTemplate支持http&https

    2023-12-06 10:16:03       32 阅读
  2. SpringBoot项目中同时支持httpshttp协议

    2023-12-06 10:16:03       39 阅读
  3. django支持https

    2023-12-06 10:16:03       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-06 10:16:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-06 10:16:03       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-06 10:16:03       82 阅读
  4. Python语言-面向对象

    2023-12-06 10:16:03       91 阅读

热门阅读

  1. tomcat是如何处理Http请求流程的?

    2023-12-06 10:16:03       61 阅读
  2. 爬虫框架Beautiful Soup

    2023-12-06 10:16:03       51 阅读
  3. MybatisPlus

    2023-12-06 10:16:03       71 阅读
  4. RedHat8.1安装mysql5.6(GLIBC方式)

    2023-12-06 10:16:03       67 阅读
  5. 网络协议的进化之路

    2023-12-06 10:16:03       52 阅读
  6. 深入理解 Spring Boot 的 ApplicationRunner 接口

    2023-12-06 10:16:03       52 阅读
  7. 软件测试面试真题 | 什么是PO设计模式?

    2023-12-06 10:16:03       56 阅读
  8. 汇编:常用的输入与输出

    2023-12-06 10:16:03       60 阅读