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

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-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
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/timespacegroup/spring-boot/tree/master/spring-boot-note4

猜你喜欢

转载自blog.csdn.net/typa01_kk/article/details/77099458