1.web容器基本配置 日志配置 HTTPS证书配置

无关···············································

@Configuration注解

spring容器在启动的时候会默认加载一些PostProcess( 后置处理器),在这些后置处理器中有一个处理器叫ConfigurationClassPostProcess 这个处理器专门去处理带有@Configuration注解的类

无关···············································

 

web容器基本配置

spring.main.web-application-type=none   //禁用web容器,点击运行以后就像个普通的没导web依赖的项目一样

server.port=8088    //配置端口号

server.port=-1    //不设置任何端口  关闭所有的http端点

server.port=0  //每次启动的端口号都是随机的

 

现在写一个小例子

 

@RestController
public class HelloController {
    @GetMapping("/hello")
    public List<String> useres(){
        ArrayList<String> numbers = new ArrayList<>();
        for (int i = 0; i < 1000; i++) {
            numbers.add(i+"");
        }
        return numbers;
    }
}

数据量太大了  1000个

1.web容器基本配置  日志配置   HTTPS证书配置

 

 

 

 注意看一下,我们的响应头里没有说请求压缩的事情

1.web容器基本配置  日志配置   HTTPS证书配置

 

 

 

开启压缩很简单,在配置文件里配置一下就好了

server.compression.enabled=true

现在看这个响应头,现在就开启了压缩 gzip

1.web容器基本配置  日志配置   HTTPS证书配置

 


 日志配置

Tomcat的日志分为两种类型

-  访问日志 accesslog 

-  服务器内部日志  

 

默认,日志是不开启的,需要我们配置开启

 

访问日志:

#生成的访问日志将在该目录下(这样写就是在根目录下)
server.tomcat.basedir=my-hihihi
#开启访问日志,默认的日志位置在项目运行的临时目录中(或者我们指定的目录中)
server.tomcat.accesslog.enabled=true

默认生成的日志格式:access_log.2020-12-10.log
当然了,我们也可以更改默认的 前缀 和 后缀
server.tomcat.accesslog.prefix=javaboy_log
server.tomcat.accesslog.suffix=.log

服务器内部日志:
logging.level.org.apache.tomcat=debug

 

logging.level.org.apache.catalina=debug

 

HTTPS证书配置

一般我们在nginx里面配置,不在springboot内嵌的tomcat里面配置。在nginx里配置更简单

 

首先我们用jdk的keytool自己生成一个证书

在jdk的bin目录里面 cmd 敲上 keytool

1.web容器基本配置  日志配置   HTTPS证书配置

 


 接着敲 :   keytool -genkeypair -alias selfsigned_localhost_sslserver -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore ebininfosoft-ssl-key.p12 -validity 3650

生成证书 别名是selfsigned_localhost_sslserver 加密算法是RSA 证书大小是2048 存储的位置和文件名是ebininfosoft-ssl-key..p12 当前目录  有效期是3650天

接着敲密码:我设置的是123456 这个密码挺重要,后面会用到 。  后面有些信息不想输入就直接回车跳过就行了

1.web容器基本配置  日志配置   HTTPS证书配置

 

 

 可以看到外面生成的证书了

1.web容器基本配置  日志配置   HTTPS证书配置

 

 

 

 然后把这个东西移到我们idea的resources目录下,再在配置文件中配置一下

 

#SSL Key Info
security.require-ssl=true
server.ssl.key-store-password=123456
server.ssl.key-store=src/main/resources/ebininfosoft-ssl-key.p12
server.ssl.key-store-type=PKCS12

 

 

 

现在我们点一下运行,测试一下

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String toHelloController(){
        return "666";
    }
}

 

现在我们输localhost:8080是进不去的

 1.web容器基本配置  日志配置   HTTPS证书配置

加上https才能进去


1.web容器基本配置  日志配置   HTTPS证书配置

 

 但是这样对用户不太友好,得让http的请求自动跳转到https

我们写一个配置类 用@Configuration注解的类就是配置类

现在我们在地址栏打localhost:8081/hello 就会自动变成https请求  https://localhost:8080/hello

package com.zou.myhttps;

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 {
    //注入到spring容器中
    @Bean
    TomcatServletWebServerFactory tomcatServletWebServerFactory(){
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory(){
            @Override
            protected void postProcessContext(Context context) {
                SecurityConstraint securityConstraint = new SecurityConstraint();
                securityConstraint.setUserConstraint("CONFIDENTAL");
                SecurityCollection collection = new SecurityCollection();
                collection.addPattern("/*");
                securityConstraint.addCollection(collection);
                context.addConstraint(securityConstraint);
            }
        };
        factory.addAdditionalTomcatConnectors(myConnectors());
        return factory;
    }

    //连接器
    private Connector myConnectors() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(8081);    //没主动配置 所以https端口是8080 那我给http8081吧
        connector.setSecure(false);
        connector.setRedirectPort(8080);
        return connector;
    }
}

 

 


 


      

 

上一篇:如何正确对待通用安全漏洞评分系统(CVSS)


下一篇:docker常用软件安装——tomcat、mysql、redis