Springboot之tomcat配置以及https配置
1、tomcat
springboot项目中,可以内置Tomcat、Jerry等容器的,当开发者添加spring-boot-starter-web依赖后,默认使用tomcat作为Web容器,可以通过以下配置调整tomcat相关信息:
server.port=8080
server.error.path=/error
server.servlet.session.timeout=30m
server.servlet.context-path=/app
server.tomcat.uri-encoding=utf-8
server.tomcat.threads.max=500
server.tomcat.basedir=/home/yangxx/temp
server.port------web容器端口号
server.error.path------配置了当项目报错时跳转的路面
server.servlet.session.timeout------session失效时间300 分钟,如果不写单位,默认秒,session过期时间以分钟未单位,如果这里时间配置90,默认单位为秒,则实际过期时间未1分钟。
server.servlet.context-path----项目名称,如果不配置时默认/.
server.tomcat.uri-encoding–配置tomcat的请求编码
server.tomcat.threads.max–配置了最大现场数。
server.tomcat.basedir—配置tomcat运行日志以及临时文件的目录,如果不配置,默认路径为系统的临时目录。
- 以上只列出项目中一些常用的配置,如想了解更多,可以到官网查看文档。
二、tomcat容器下HTTPS配置
目前因为安全性的考虑,更多的生产项目需要配置https协议,tomcat容器下自己配置https协议,可以通过本地电脑jdk中keytool命令完成自己的密钥文件生成。跳转到/jdk/bin/文件夹下,在当前目录下打开cmd,输入如下命令:
keytool -genkey -alias demohttps -keyalg RSA -keysize 2048 -keystore yangxf.p12 -validity 365
- -genkey 要创建一个密钥;
- -alias 密钥别名;
- -keyalg 密钥加密算法 RSA,非对称加密;
- -keysize 密钥长度;
- -keystore 密钥存放位置
- -validity 密钥有效时间 365天
正确执行完毕后,将在当前目录下生产一个yangxf.p12(自己命名)的文件,将之放到项目根目录下,如下配置application.yml文件:
server.ssl.key-store=yangxf.p12
server.ssl.key-alias=demohttps
server.ssl.key-store-password=123456
配置好以上,启动服务,访问http://localhost:8080/api/hello,弹出以下错误。http协议已失效,http请求无法访问。
访问https://localhost:8080/api/hello,
https协议已生效并能正常访问,因为没有证书机构去验证,所以自己配置的密钥只能显示不安全。
可以通过切换不同的启动配置切换http协议以及https协议。
也可以添加配置兼容http协议以及https协议,将所有http转换成https。
/**
* FileName: TomcatConfig
* Author: Administrator
* Date: 2021/2/7 14:32
* Description:
* History:
* <author> <time> <version> <desc>
* 作者姓名 修改时间 版本号 描述
*/
package com.yangxf.si.config.tomcatssl;
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;
import org.springframework.context.annotation.Profile;
/**
* 〈springboot兼容http以及https配置〉<br>
* 〈〉
*
* @author Administrator
* @create 2021/2/7
* @since 1.0.0
*/
//@Profile("dev_ssl")
@Configuration
public class TomcatConfig {
@Bean
TomcatServletWebServerFactory tomcatServletWebServerFactory(){
TomcatServletWebServerFactory factory=new TomcatServletWebServerFactory(){
@Override
protected void postProcessContext(Context context) {
SecurityConstraint constraint = new SecurityConstraint();
constraint.setUserConstraint("CONFIDENTIAL");//机密
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
constraint.addCollection(collection);
context.addConstraint(constraint);
}
};
factory.addAdditionalTomcatConnectors(createTomcatConnector());
return factory;
}
/**
* 监听http端口强制转换为https端口
* @return
*/
private Connector createTomcatConnector(){
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(8080);
connector.setSecure(false);
connector.setRedirectPort(8443);
return connector;
}
}
总结
生产项目中更多的是在nginx服务完成协议配置。