转:https://www./blog/cache/detail_2457.html 在 Spring boot 项目中,可以内置 Tomcat、Jetty、Undertow、Netty 等服务器容器。当我们添加了 spring-boot-starter-web 依赖后,默认会使用 Tomcat 作为 Web 容器。 下面演示如何对这个 Tomcat 进行进一步的配置。1,常规配置(1)要对 Tomcat 进行进一步的配置,可以在 application.properties 中进行配置:(2)下面我们修改一些常用的配置,内容如下: 配置说明:
server.port=8081 server.error.path=/error server.servlet.session.timeout=30m server.servlet.context-path=/hangge server.tomcat.uri-encoding=utf-8 server.tomcat.max-threads=500 server.tomcat.basedir=/home/hangge/tmp (3)重启后,由于我们配置了 hangge 这个项目名称,因此需要通过如下地址访问 /hello 这个接口: 2,HTTPS 配置由于 HTTPS 具有良好的安全性,在开发中得到了越来越广泛的应用。不过一个 HTTPS 证书价格还是有点贵,好在国内一些服务器厂商也有提供免费的 HTTPS 证书。为方便演示,下面我直接使用 jdk 提供的的 Java 数字证书管理工具 keytool 来生成一个证书。
keytool -genkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore hangge.p12 -validity 365 (2)上述命令执行过程中会要求输入密钥口令等信息,我们根据提示一步步输入即可。最终会在当前目录下生成一个 hangge.p12 的文件,我们将其复制到项目的根目录下。 (3)接着在项目 application.properties 中做如下配置: 配置说明:
server.ssl.key-store=hangge.p12 server.ssl.key-alias=tomcathttps server.ssl.key-store-password=123456 (4)配置完毕重启项目,这次我们通过 https 地址进行访问。由于证书是自己生成的,不被浏览器认可。 (5)我们点“高级”继续前进即可,最后运行结果如下:3,将 HTTP 请求重定向为 HTTPS 请求(1)经过前面 HTTPS 配置以后,如果我们再用 HTTP 的方式访问接口,会发现访问失败。这是因为 Spring Boot 不支持同时在配置中启动 HTTP 和 HTTPS。(2)我们可以在项目中创建一个配置类(TomcatConfig)来实现自动重定向: 代码说明:我们首先配置一个 TomcatServletWebServerFactory,然后添加一个 Tomcat 中的 Connector(监听 80 端口),并将请求转发到 8080 上去。package com.example.demo; 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 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(80); connector.setSecure(false); connector.setRedirectPort(8080); return connector; } } (3)配置完成后,我们在浏览器上输入 “http://localhost:80/hello” 就会自动重定向到“https://localhost:8080/hello” |
|