无关···············································
@Configuration注解
spring容器在启动的时候会默认加载一些PostProcess( 后置处理器),在这些后置处理器中有一个处理器叫ConfigurationClassPostProcess 这个处理器专门去处理带有@Configuration注解的类
无关···············································
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个
注意看一下,我们的响应头里没有说请求压缩的事情
开启压缩很简单,在配置文件里配置一下就好了
server.compression.enabled=true 现在看这个响应头,现在就开启了压缩 gzip
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
一般我们在nginx里面配置,不在springboot内嵌的tomcat里面配置。在nginx里配置更简单
首先我们用jdk的keytool自己生成一个证书
在jdk的bin目录里面 cmd 敲上 keytool
接着敲 : 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 这个密码挺重要,后面会用到 。 后面有些信息不想输入就直接回车跳过就行了
可以看到外面生成的证书了
然后把这个东西移到我们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是进不去的
加上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; } }