Spring Boot支持tomcat服务器,支持http、https(ssl、tls)双协议,支持双端口

来源:互联网 发布:深澜软件下载 编辑:程序博客网 时间:2024/05/18 03:22

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>

tomcat依赖
并且,在我们创建的第一个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-8https:  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@RestControllerpublic 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;@Slf4jpublic 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.jsonhttps://192.168.1.119:7204/note4/test.json
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"}

tomcat启动日志

GitHub全源代码: https://github.com/loveshareme/spring-boot/tree/master/spring-boot-note4

阅读全文
0 0