5.1.3 配置嵌入式服务器
已经看到如何通过设置 server.port 来设置 servlet 容器。还没有让你看到的是,如果把 server.port 设置为 0 会发生什么:
server:
port: 0
尽管正在显式地设置 server.port 为 0,但是服务器不会在端口 0 上启动。相反,它将从随机选择的可用端口启动。这在运行自动化集成测试以确保任何并发运行的测试不会在硬编码端口号上发生冲突时非常有用。在第 13 章中将看到,当不关心应用程序启动于哪个端口时,它也很有用,因为它是一个将从服务注册表中查找的微服务。
但是底层服务器不仅仅是一个端口。需要对底层容器做的最常见的事情之一是将其设置为处理 HTTPS 请求。要做到这一点,你必须做的第一件事是通过使用 JDK 的 keytool 命令行工具创建一个密钥存储:
$ keytool -keystore mykeys.jks -genkey -alias tomcat -keyalg RSA
你将会被问到几个关于你的名字和公司的问题,这些问题大部分都是无关紧要的。但当被要求输入密码时,记住你的密码。对于本例,我选择 letmein 作为密码。
接下来,需要设置一些属性,用于在嵌入式服务器中启用 HTTPS。可以在命令行中指定它们,但是那样会非常不方便。相反,可能会在 application.properties 或 application.yml 文件中设置它们。在 application.yml 中,属性可能是这样的:
server:
port: 8443
ssl:
key-store: file:///path/to/mykeys.jks
key-store-password: letmein
key-password: letmein
在这里 server.port 属性设置为 8443,这是开发 HTTPS 服务器的常用选择。server.ssl.key-store 属性设置为创建密钥存储库文件的路径。这里显示了一个 file:// URL 来从文件系统加载它,但是如果将它打包到应用程序 JAR 文件中,将使用一个 classpath: URL来引用它。同时 server.ssl.key-store-password 和 server.ssl.key-password 属性都被设置为创建密钥存储时指定的密码值。
有了这些属性,应用程序应该侦听端口 8443 上的 HTTPS 请求。根据使用的浏览器,可能会遇到服务器无法验证其身份的警告。在开发期间从本地主机提供服务时,这没有什么可担心的。
复制链接