springboot+undertow+http+https+http2

xiaoxiao2021-02-28  116

一、springboot使用undowtow替换tomcat 1、首先修改springboot的配置文件web.xml,找到tomcat的依赖并解除,再增加undertow的依赖 <dependency> <!--解除对tomcat的依赖--> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <!--undertow包的依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-undertow</artifactId> </dependency> 注意:这里配置好后一定要重新加载依赖包,重新编译程序检查程序没有报错为止,(菜鸟的我曾经在此卡蛋了) 2、其次修改properties配置文件,修改一下有关tomcat的配置,我这里主要有关的就是日志文件的配置,当然了没有的话就不用配置了 # 存放Tomcat的日志、Dump等文件的临时文件夹,默认为系统的tmp文件夹 #server.tomcat.basedir=./ #打开Tomcat的Access日志 #server.tomcat.accesslog.enabled=true #Access日志存放的路劲 #server.tomcat.accesslog.directory=logs/access_log #server.tomcat.accesslog.buffered=false #server.tomcat.accesslog.request-attributes-enabled=true #Access日志的输出格式 #server.tomcat.accesslog.pattern=%t [%I] %{X-Forwarded-For}i %a %r %s %D #以上是tomcat的日志配置全都注释掉,下面是有关undertow的配置 server.undertow.accesslog.enabled=true server.undertow.accesslog.dir=logs/access_log server.undertow.accesslog.pattern= %t [%I] %a %r %s (%b Byte) (%T ms) 3、重启服务可以看到你的服务已经是undertow了 说明:undertow替换tomcat就是这么简单 二、springboot+http到https 1、http转https需要安全协议ssl证书,协议证书基本上都需要花钱买的,也有免费试用期限的,不过可以自己生成ssl证书(又为自签证书),自己生成证书的方法有多种,在这里就简单的介绍一种由jdk自带的keytool工具生成自签证书,生成证书的前提条件是已经安装了jdk,其次找到安装jdk的bin目录下,可以看到有个keytool 2、使用keytool命令生成证书 keytool -genkey -alias undertow( 别名 ) -keypass 123456( 别名密码 ) -storetype PKCS12( 密钥类型 ) -keyalg RSA( 算法 ) -keysize 1024( 密钥长度 ) -validity 365( 有效期,天单位 ) -keystore D:/keys/ldkeystore.p12( 指定生成证书的位置和证书名称 ) -storepass 123456( 获取 keystore 信息的密码 ) 方便复制版: keytool -genkey -alias undertow -storetype PKCS12 -keyalg RSA  -keypass 123456 -keysize 1024 -validity 365 -keystore D:\keys\ldkeystore.p12 -storepass 123456 如图: 3、上图 选择 y 即可在 D:/keys/ 文件夹内生成名为 ldkeystore.p12 的自签证书。 成功后无提示信息 注意: D:/keys/ 目录需要提前手动创建好,否则会生成失败 ②提示输入域名的时候不能输入 IP 地址 问题 ①的错误信息如下: 4、springboot配置自签证书 application.properties 中配置 自签证书 server.ssl.key-store=D:/keys/ldkeystore.p12   #证书 server.ssl.key-store-password=123456           #别名密码 server.ssl.key-store-type=PKCS12             #证书类型 server.ssl.key-alias=tomcat   #别名 5、重启服务,通过 https://... 访问链接即可 注意:在第一次浏览时会提示,此网址存在安全问题,不要紧继续浏览此网页即可,这样就从http转换到https,有不懂http、https的小伙伴也可以先了解一下http和https之间的区别 三、springboot+undertow+https+http2 1、前三项已经实现了,那么undertow如何支持http2,这就需要再在代码里编写了,首先需要找到配置类(带有 @Configuration JAVA类即可 ),这里假设你的服务端口为8443 代码如下: /** * undertow服务器下http重定向到https */ @Bean UndertowEmbeddedServletContainerFactory embeddedServletContainerFactory() { UndertowEmbeddedServletContainerFactory factory = new UndertowEmbeddedServletContainerFactory(); // 这段就可以可以转换为http2 factory.addBuilderCustomizers(builder -> builder.setServerOption(UndertowOptions.ENABLE_HTTP2, true)); //这段可以增加http重定向,如果只需要http2的话下面的代码可以去掉 factory.addBuilderCustomizers(new UndertowBuilderCustomizer() { @Override public void customize(Undertow.Builder builder) { builder.addHttpListener(8080, "0.0.0.0"); } }); //下面这段是将http的8080端口重定向到https的8443端口上 factory.addDeploymentInfoCustomizers(deploymentInfo -> { deploymentInfo.addSecurityConstraint(new SecurityConstraint() .addWebResourceCollection(new WebResourceCollection() .addUrlPattern("/*")) .setTransportGuaranteeType(TransportGuaranteeType.CONFIDENTIAL) .setEmptyRoleSemantic(SecurityInfo.EmptyRoleSemantic.PERMIT)) .setConfidentialPortManager(exchange -> 8443); }); return factory; } 2、重启服务,https://localhost:8443可以访问网页,也可以通过http://localhost:8080访问会自动跳转到https://localhost:8443的端口上 ; 3、验证http2: 使用Chrome的网络工具,在地址栏中输入 chrome://net-internals/#http2 如图: 可以看到你的服务端口也在上面,有一列为protocolNegotiated的数值为h2的则是http2了
转载请注明原文地址: https://www.6miu.com/read-18790.html

最新回复(0)