springboot tomcat HTTPS配置
Tomcat配置
常规配置在Spring Boot项目中,可以内置Tomcat、Jetty、Undertow、Netty等容器。当开发者添加了spring-boot-starter-web依赖之后,默认会使用Tomcat作为Web容器。如果需要对Tomcat做进一步的配置,可以在application.properties中进行配置,代码如下:
server: port: 8081 error: path: /error servlet: session: timeout: 1m # context-path: /xc tomcat: uri-encoding: UTF-8 max-threads: 1
• server.port配置了Web容器的端口号。
• error.path配置了当项目出错时跳转去的页面。
• session.timeout配置了session失效时间,30m表示30分钟,如果不写单位,默认单位是秒。由于Tomcat中配置session过期时间以分钟为单位,因此这里单位如果是秒的话,该时间会被转换为一个不超过所配置秒数的最大分钟数,例如这里配置了119,默认单位为秒,则实际session过期时间为1分钟。
• context-path表示项目名称,不配置时默认为/。如果配置了,就要在访问路径中加上配置的路径。
• uri-encoding表示配置Tomcat请求编码。
• max-threads表示Tomcat最大线程数。
• basedir是一个存放Tomcat运行日志和临时文件的目录,若不配置,则默认使用系统的临时目录。
当然,Web容器相关的配置不止这些,这里只列出了一些常用的配置,完整的配置可以参考官方文档Appendix A. Common application properties一节。
HTTPS配置
由于HTTPS具有良好的安全性,在开发中得到了越来越广泛的应用,像微信公众号、小程序等的开发都要使用HTTPS来完成。对于个人开发者而言,一个HTTPS证书的价格还是有点贵,国内有一些云服务器厂商提供免费的HTTPS证书,一个账号可以申请数个。不过在jdk中提供了一个Java数字证书管理工具keytool,在\jdk\bin目录下,通过这个工具可以自己生成一个数字证书,生成命令如下:
1 | keytool -genkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore xc.p12 -validity 365 |
• -genkey表示要创建一个新的密钥。
• -alias表示keystore的别名。
• -keyalg表示使用的加密算法是RSA,一种非对称加密算法。
• -keysize表示密钥的长度。
• -keystore表示生成的密钥存放位置。
• -validity表示密钥的有效时间,单位为天。
在cmd窗口中直接执行如上命令,在执行的过程中需要输入密钥口令等信息,根据提示输入即可。命令执行完成后,会在当前用户目录下生成一个名为xc.p12的文件,将这个文件复制到项目的根目录下,然后在application.properties中做如下配置:
1 2 3 4 5 | server: ssl: key -store: sang.p12 key -alias: tomcathttps key -store- password : 123456 |
• key-store表示密钥文件名。
• key-alias表示密钥别名。
• key-store-password就是在cmd命令执行过程中输入的密码。
配置成功后,启动项目,在浏览器中输入“https://localhost:8081/”来查看结果。注意,证书是自己生成的,不被浏览器认可,此时添加信任或者继续前进即可
此时,如果以HTTP的方式访问接口,就会访问失败
这是因为Spring Boot不支持同时在配置中启动HTTP和HTTPS。这个时候可以配置请求重定向,将HTTP请求重定向为HTTPS请求。配置方式如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | @Configuration public class TomcatConfig { @Bean TomcatServletWebServerFactory tomcatServletWebServerFactory() { TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory() { @Override protected void postProcessContext(Context context) { 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( 8080 ); connector.setSecure( false ); connector.setRedirectPort( 8081 ); return connector; } } |
这里首先配置一个TomcatServletWebServerFactory,然后添加一个Tomcat中的Connector(监听8080端口),并将请求转发到8081上去。配置完成后,在浏览器中输入“http://localhost:8080/”,就会自动重定向到https://localhost:8081/上。
文章来源: Spring Boot+Vue全栈开发实战 2.4 Web容器配置
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2020-04-01 ArrayList的使用及原理