Spring Boot Tomcate配置 (SSL配置)
来源:互联网 发布:网络ip地址冲突 编辑:程序博客网 时间:2024/06/05 22:40
本节虽然叫Tomcat配置,但其实指的是servlet容器的配置,因为Spring Boot默认内嵌的Tomcat为servlet容器,所以本节只讲对Tomcat配置,其实本节的配置对Tomcat、Jetty和Undertow都是通用的。
1 配置Tomcat
关于Tomcat的所有属性都在org.springframework.boot.autoconfigure.web.ServerProperties配置类中做了定义,我们只需在application.properties配置属性做配置即可。通用的Servlet容器配置都以“server”作为前缀,而Tomcat特有配置都以“server.tomcat”作为前缀。下面举一些常用的例子。
配置Servlet容器:
- server.port= #配置程序端口,默认为8080
- server.session-timeout= #用户会话session过期时间,以秒为单位
- server.context-path= #配置访问路径,默认为/
配置Tomcat:
- server.tomcat.uri-encoding = #配置Tomcat编码,默认为UTF-8
- server.tomcat.compression= # Tomcat是否开启压缩,默认为关闭off
更为详细的Servlet容器配置及Tomcat配置,请查看博客中以“server”和“server.tomcat”为前缀的配置。
2 代码配置Tomcat
如果你需要通过代码的方式配置servlet容器,则可以注册一个实现EmbeddedServletContainerCustomizer接口的Bean;若想直接配置Tomcat、Jetty、Undertow,则可以直接定定义TomcatEmbeddedServletContainerFactory、JettyEmbeddedServletContainer Factory、UndertowEmbeddedServletContainerFactory。
1.通用配置
(1)新建类的配置:
import java.util.concurrent.TimeUnit; import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer; import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; import org.springframework.boot.context.embedded.ErrorPage; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Component; @Component public class CustomServletContainer implements EmbeddedServletContainerCustomizer{ @Override public void customize(ConfigurableEmbeddedServletContainer container) { container.setPort(8888); //1 container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/404.html"));//2 container.setSessionTimeout(10,TimeUnit.MINUTES); //3 } }
(2)当前配置文件内配置。若要在当前已有的配置文件内添加类的Bean的话,则在Spring配置中,注意当前类要声明为static:
@SpringBootApplication public class Ch74Application { public static void main(String[] args) { SpringApplication.run(Ch74Application.class, args); } @Component public static class CustomServletContainer implements EmbeddedServletContainerCustomizer{ @Override public void customize(ConfigurableEmbeddedServletContainer container) { container.setPort(8888); //1 container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/404.html"));//2 container.setSessionTimeout(10,TimeUnit.MINUTES); //3 } } }
2.特定配置
下面以Tomcat为例(Jetty使用JettyEmbeddedServletContainerFactory,Undertow使用UndertowEmbeddedServletContainerFactory):
@Bean public EmbeddedServletContainerFactory servletContainer() { TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory(); factory.setPort(8888); //1 factory.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/404.html"));//2 factory.setSessionTimeout(10, TimeUnit.MINUTES); //3 return factory; }
代码解释 上面两个例子的代码都实现了这些功能: ①配置端口号;
②配置错误页面,根据HttpStatus中的错误状态信息,直接转向错误页面,其中404.html放置在src/main/resources/static下即可;
③配置Servlet容器用户会话(session)过期时间。
3 替换Tomcat
Spring Boot默认使用Tomcat作为内嵌Servlet容器,查看spring-boot-starter-web依赖,如图所示。
如果要使用Jetty或者Undertow为sevvlet容器,只需修改spring-boot-starter-web的依赖即可。
1.替换为Jetty
在pom.xml中,将spring-boot-starter-web的依赖由spring-boot-starter-tomcat替换为spring-boot-starter-Jetty:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency>
2.替换为Undertow
在pom.xml中,将spring-boot-starter-web的依赖由spring-boot-starter-tomcat替换为spring-boot-starter-undertow:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-undertow</artifactId> </dependency>
4 配置SSL(https)
SSL的配置也是我们在实际应用中经常遇到的场景。
SSL(Secure Sockets Layer,安全套接层)是为网络通信提供安全及数据完整性的一种安全协议,SSL在网络传输层对网络连接进行加密。SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通信提供安全支持。SSL协议可分为两层:SSL记录协议(SSL Record Protocol),它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议(SSL Handshake Protocol),它建立在SSL记录协议之上,用于在实际数据传输开始前,通信双方进行身份认证、协商加密算法、交换加密密钥等。
而在基于B/S的Web应用中,是通过HTTPS来实现SSL的。HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即在HTTP下加入SSL层,HTTPS的安全基础是SSL。
因为Spring Boot用的是内嵌的Tomcat,因而我们做SSL配置的时候需要做如下的操作。
1.生成证书
使用SSL首先需要一个证书,这个证书既可以是自签名的,也可以是从SSL证书授权中心获得的。本例为了演示方便,演示自授权证书的生成。
每一个JDK或者JRE里都有一个工具叫keytool,它是一个证书管理工具,可以用来生成自签名的证书,它的位置为%JAVA_HOME%\bin\keytool.exe。
在控制台输入如下命令,然后按照提示操作,如图:
keytool -genkeypair -alias "tomcate"
这时候我们在当前目录下生成了一个.keystore文件。
2.Spring Boot配置SSL
将.keystore文件复制到项目的根目录,然后在application.properties中做如下SSL的配置:
- server.port=8443 #指定监听端口
- server.ssl.key-store=.keystore #ssl存储的文件名
- server.ssl.key-store-password=111111 #证书密码
- server.ssl.key-store-type=JKS #证书类型
- server.ssl.key-alias=tomcate #证书别名
此时启动Spring Boot,控制台输出效果如下。
INFO 9988 --- [main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8443 (https)
此时访问https://localhost:8443,效果如图所示。
3.http转向https
很多时候我们在地址栏输入的是http,但是会自动转向到https,例如我们访问百度的时候。
要实现这个功能,我们需配置TomcatEmbeddedServletContainerFactory,并且添加Tomcat的connector来实现。
这时我们需要在配置文件里增加如下配置:
package com.chenfeng.xiaolyuh;import java.util.ArrayList;import java.util.List;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.beans.factory.annotation.Autowired;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;import org.springframework.context.annotation.Bean;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import com.chenfeng.xiaolyuh.entity.Person;import com.chenfeng.xiaolyuh.properties.AuthorSettings;@SpringBootApplication // 这个是Spring Boot项目的核心注解,主要是开启自动配置。public class SpringBootStudentApplication {@Bean public EmbeddedServletContainerFactory servletContainer() { TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() { @Override protected void postProcessContext(Context context) { SecurityConstraint securityConstraint = new SecurityConstraint(); securityConstraint.setUserConstraint("CONFIDENTIAL"); SecurityCollection collection = new SecurityCollection(); collection.addPattern("/*"); securityConstraint.addCollection(collection); context.addConstraint(securityConstraint); } }; tomcat.addAdditionalTomcatConnectors(httpConnector()); return tomcat; } @Bean public Connector httpConnector() { Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); connector.setScheme("http"); connector.setPort(8080); connector.setSecure(false); connector.setRedirectPort(8443); return connector; }// 标准的JAVA应用main方法,主要作用作为项目启动的入口public static void main(String[] args) {SpringApplication.run(SpringBootStudentApplication.class, args);}}
此时启动Spring Boot,控制台输出效果:
INFO 5624 --- [main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8443 (https) 8080 (http)
此时我们访问:http://localhost:8080,会自动转到https://localhost:8443
- Spring Boot Tomcate配置 (SSL配置)
- Spring Boot 配置SSL
- spring boot 配置 https|ssl
- Spring Boot tomcat配置SSL
- SSL证书和spring boot的配置
- 【spring boot】配置ssl证书实现https
- spring boot 配置ssl证书实现https
- spring boot 配置https和SSL
- tomcate配置
- Tomcate配置
- Spring Boot 实践折腾记(六):Spring Boot中的容器配置和SSL支持
- tomcate user role 配置
- tomcate 配置 动态 虚拟目录
- Tomcate Url乱码配置
- tomcate + jndi 详细配置
- tomcate配置篇
- tomcate配置连接池
- tomcate + jndi 详细配置
- rose jade框架 sql中的字段和实体类中的字段的映射关系
- gdb so 加载
- Linux音频设备驱动_ALSA驱动框架的转载链接
- Activiti部署模型乱码
- WIN32学习——定时器消息
- Spring Boot Tomcate配置 (SSL配置)
- 解决oracle表锁死
- 李白买酒的递归求法
- Java实现的二分查找算法
- ORACLE事物隔离级别
- Palindrome Linked List
- [Leetcode] 150. Evaluate Reverse Polish Notation 解题报告
- 第一行代码第二版(郭霖著)笔记之第六章(详解持久化技术)
- BZOJ1585 Earthquake Damage 2 地震伤害