Spring Boot支持tomcat服务器,支持http、https(ssl、tls)双协议,支持双端口
2017-08-11 16:12
1401 查看
1:Spring boot 项目默认的web服务器为tomcat,默认依赖“spring-boot-starter-web”,其中含有tomcat的依赖,请看下图:
注:Spring boot版本:1.5.6.RELEASE Tomcat版本:8.5.16<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
并且,在我们创建的第一个spring boot的启动日志可以看出,默认的tomcat服务器:IntelliJ IDEA创建第一个Spring Boot项目
2:Spring boot tomcat支持http、https(ssl、tls)双协议,支持双端口配置
2.1:application.yml配置,配置http的协议端口为5204,配置https的证书文件路径、密码、端口(7204)server: address: 192.168.1.119 port: 5204 context-path: /note4 tomcat: max-threads: 1000 uri-encoding: UTF-8 https: port: 7204 keystore-password: 123456 keystore-file: D:/rsakey/loveshare.keystore
2.2:配置参数绑定bean的属性HttpsProperties
package me.loveshare.properties; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; @Data @ConfigurationProperties(prefix = "https") public class HttpsProperties { private Integer port; private String keystoreFile; private String keystorePassword; }
2.3:注解该类HttpsConfiguration,配置Bean对象EmbeddedServletContainerFactory,进行Tomcat初始化:
package me.loveshare.configuration; import lombok.extern.slf4j.Slf4j; import me.loveshare.properties.HttpsProperties; import org.apache.catalina.connector.Connector; import org.apache.coyote.http11.Http11NioProtocol; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory; import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.nio.charset.Charset; @Slf4j @Configuration @EnableConfigurationProperties(HttpsProperties.class) public class HttpsConfiguration { @Autowired private HttpsProperties properties; @Bean public EmbeddedServletContainerFactory servletContainer() { TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory(); tomcat.setUriEncoding(Charset.forName("UTF-8")); tomcat.addAdditionalTomcatConnectors(createSslConnector()); log.info("\n*** Tomcat SSL setting successful." + properties.getPort()); return tomcat; } public Connector createSslConnector() { Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler(); connector.setPort(properties.getPort()); connector.setScheme("https"); connector.setSecure(true); protocol.setSSLEnabled(true); protocol.setClientAuth("false"); protocol.setSSLProtocol("TLSv1+TLSv1.1+TLSv1.2"); protocol.setKeystoreFile(properties.getKeystoreFile()); protocol.setKeystorePass(properties.getKeystorePassword()); return connector; } }
3:协议测试
3.1:测试api接口配置:package me.loveshare.web.api; import lombok.extern.slf4j.Slf4j; import me.loveshare.data.entity.bo.common.JsonResult; import me.loveshare.data.entity.bo.common.JsonResultMethod; import me.loveshare.data.util.DateUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.Date; @Slf4j @RestController public class TestDataApi extends BaseApi { /** * 协议测试 */ @ResponseBody @RequestMapping(value = "test", produces = "application/json; charset=UTF-8", method = {RequestMethod.GET, RequestMethod.POST}) public JsonResult initDbDatasC() { return JsonResultMethod.code_200("The request completed successfully.", DateUtils.timestamp(new Date())); } }
3.2:请求参数监控:
package me.loveshare.web.api; import lombok.extern.slf4j.Slf4j; import me.loveshare.data.util.NetworkUtils; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestHeader; import javax.servlet.http.HttpServletRequest; @Slf4j public class BaseApi { @ModelAttribute public void firstMC(HttpServletRequest request, @RequestHeader(value = "uAT", required = false) String uAT) { request.setAttribute("uAT", uAT); //此处可转换用户的id //打印请求日志 printAccess(request); } private final void printAccess(HttpServletRequest request) { StringBuilder su = new StringBuilder(); su.append("\nUser-Access-Args:").append("{"); su.append("\"protocol\":\"").append(request.getProtocol() + "(" + request.getScheme()).append(")\","); su.append("\"ip\":\"").append(NetworkUtils.getIpAddr(request)).append("\","); su.append("\"port\":\"").append(NetworkUtils.getPort(request)).append("\","); su.append("\"method\":\"").append(request.getMethod()).append("\","); su.append("\"url\":\"").append(NetworkUtils.getCurrentURL(request)).append("\","); su.append("\"user-agent\":\"").append(NetworkUtils.getUserAgent(request)).append("\","); su.append("\"uAT\":\"").append(request.getAttribute("uAT")).append("\"}"); log.info(su.toString()); } }
3.3:web请求地址和日志:
http://192.168.1.119:5204/note4/test.json https://192.168.1.119:7204/note4/test.json[/code]User-Access-Args:{"protocol":"HTTP/1.1(http)","ip":"192.168.1.119","port":"49181","method":"GET","url":"/note4/test.json","user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36","uAT":"null"} User-Access-Args:{"protocol":"HTTP/1.1(https)","ip":"192.168.1.119","port":"65299","method":"GET","url":"/note4/test.json","user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36","uAT":"null"}GitHub全源代码: https://github.com/loveshareme/spring-boot/tree/master/spring-boot-note4
相关文章推荐
- Spring Boot支持Jetty服务器,支持http、https(ssl、tls)双协议,支持双端口
- Spring Boot支持Undertow服务器,支持http、https(ssl、tls)双协议,支持双端口
- Http协议之Https&SSL/TLS&DNS
- 后端tomcat不开启https,用nginx反向代理使网站同时支持http和https协议总结
- HTTP & HTTPS网络协议重点总结(基于SSL/TLS的握手、TCP/IP协议基础、加密学)
- 让CentOS服务器支持https(安全http协议)
- https spring boot (tomcat) 阿里云服务器配置
- 配置tomcat同时支持http和https协议
- https协议发送请求体太大,导致了404(tomcat设置的是http端口和请求体大小)
- 让CentOS服务器支持https(安全http协议)
- HTTP协议的介绍,Web服务器配置,虚拟主机的配置,如何用SSL实现HTTPS。
- 在 Tomcat 中配置 SSL/TLS 以支持 HTTPS
- 在 Tomcat 中配置 SSL/TLS 以支持 HTTPS
- Spring Boot工程支持HTTP和HTTPS,HTTP重定向HTTPS
- spring-boot实现访问http跳转到https端口的方法
- 在 Tomcat 中配置 SSL/TLS 以支持 HTTPS
- SpringMvc和SpringBoot配置Tomcat支持Https
- 在 Tomcat 中配置 SSL/TLS 以支持 HTTPS
- 在 Tomcat 中配置 SSL/TLS 以支持 HTTPS
- 在 Tomcat 中配置 SSL/TLS 以支持 HTTPS