SpringBoot18-springboot的Web开发-Tomcat配置
来源:互联网 发布:修复ie7软件 编辑:程序博客网 时间:2024/06/05 07:53
这里讲的tomcat配置,但其实指的是servlet容器的配置,因为Spring Boot默认内嵌的Tomcat为servlet容器,这里的配置对Tomcat,Jetty和Undertow都是通用的
一:配置Tomcat
关于Tomcat的所有属性都在org.springframework.boot.autoconfigure.web.ServerProperties配置类中做了定义,我们只需在application.yml配置属性做配置即可。通用的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
还有更多可以看文档和网上查找资料。
二:代码配置Tomcat
如果你需要通过代码的方式配置servlet容器,则可以注册一个实现EmbeddedServletContainerCustomizer接口的Bean;若想直接配置Tomcat,Jetty则可以直接定义TomcatEmbeddedServletContainerFactory,JettyEmbeddedServletContainerFactory
1,通用配置
1)新建类的配置
package com.jack.web.config;import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;import org.springframework.boot.web.servlet.ErrorPage;import org.springframework.http.HttpStatus;import org.springframework.stereotype.Component;import java.util.concurrent.TimeUnit;/** * 配置servlet容器 */@Componentpublic class CustomServletContainer implements EmbeddedServletContainerCustomizer{ @Override public void customize(ConfigurableEmbeddedServletContainer configurableEmbeddedServletContainer) { //配置端口号 configurableEmbeddedServletContainer.setPort(8888); //配置错误页面,根据HttpStatus中的错误状态,直接转向错误页面,其中404.html放置在src/main/resources/static下即可 configurableEmbeddedServletContainer.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND,"/404.html")); //配置Servlet容器用户会话session过期时间 configurableEmbeddedServletContainer.setSessionTimeout(10, TimeUnit.MINUTES); }}
2),当前配置文件内配置。若要在当前已有的配置文件内添加类的Bean的话,则在Spring配置中,注意当前类要声明为static:
package com.jack.web;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;import org.springframework.boot.web.servlet.ErrorPage;import org.springframework.http.HttpStatus;import java.util.concurrent.TimeUnit;@SpringBootApplicationpublic class Springboot2webApplication {public static void main(String[] args) {SpringApplication.run(Springboot2webApplication.class, args);}public static class CustomServletContainer implements EmbeddedServletContainerCustomizer{@Overridepublic void customize(ConfigurableEmbeddedServletContainer configurableEmbeddedServletContainer) {//配置端口号configurableEmbeddedServletContainer.setPort(8888);//配置错误页面,根据HttpStatus中的错误状态,直接转向错误页面,其中404.html放置在src/main/resources/static下即可configurableEmbeddedServletContainer.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND,"/404.html"));//配置Servlet容器用户会话session过期时间configurableEmbeddedServletContainer.setSessionTimeout(10, TimeUnit.MINUTES);}}}
2,特定配置
下面以tomcat为例(Jetty使用JettyEmbeddedServletContainerFactory)
@Beanpublic EmbeddedServletContainerFactory servletContainer(){TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();factory.setPort(8888);factory.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND,"/404.html")); factory.setSessionTimeout(10,TimeUnit.MINUTES); return factory;}
三:替换Tomcat
Spring Boot默认使用Tomcat作为内嵌Servlet容器,查看spring-boot-starter-web依赖,如下:
如果要使用Jetty或者Undertow为servlet容器,只需修改spring-boot-starter-web依赖即可。
1,替换为Jetty
在pom.xml中将sring-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><!--<version></version>--></dependency>
此时启动Spring boot,在控制台输出效果如下:
要替换Undertow,和替换为Jetty一样,修改pom.xml里面的配置就行了,这里就不举例了。
四: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,并将JAVA_HOME的bin目录加入到Path后,即可在控制台调用该命令,如下图:
在控制台输入如下命令,然后按照提示操作,如下图:
keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore jackkeystore.p12 -validity 3650
1.-storetype 指定密钥仓库类型
2.-keyalg 生证书的算法名称,RSA是一种非对称加密算法
3.-keysize 证书大小
4.-keystore 生成的证书文件的存储路径
5.-validity 证书的有效期
参考:http://blog.csdn.net/u012702547/article/details/53790722
在当前的目录下生成一个jackkeystore.p12文件,这就是我们要的证书文件,如下:
2,Spring Boot配置SSL
添加一个test.html到src/main/resources/templates目录下,做为测试,将jackkeystore.p12文件复制到项目的根目录,然后在application中做如下SSL配置:
由于springboot2web是SpringCloudTwo的module,所以把.keystore文件放在SpringCloudTwo目录下,
application.yml的配置如下:
server: port: 9090 ssl: key-store: jackkeystore.p12 key-store-password: 123456 key-store-type: PKCS12 key-alias: tomcat
此时在启动Spring Boot,控制台输出效果如下:
3,测试https
1)修改pom.xml,目前代码如下,需要添加thymeleaf支持,代码如下:
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.jack</groupId><artifactId>springboot2web</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>springboot2web</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.6.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><!--<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>--><!--thymeleaf依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId><version>1.5.6.RELEASE</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
2)test.html代码如下:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"/> <title>index.html</title></head><body> this is https test!!!!!!!!!!</body></html>
3)编写一个控制器,代码如下:
package com.jack.web.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;@Controllerpublic class IndexController { @RequestMapping(value = "/test") public String index(){ return "test"; }}
4)启动项目
在浏览器输入:https://localhost:9090/test,浏览器显示如下:
4,http转向https
很多时候我们在地址栏输入http,但是会自动转向到https,例如访问百度的时候.
要实现这个功能,需要配置TomcatEmbeddedServletContainerFactory,并且添加tomcat的connector来实现。
这时我们需要在配置文件里增加如下配置:
package com.jack.web;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.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;@SpringBootApplicationpublic class Springboot2webApplication { public static void main(String[] args) { SpringApplication.run(Springboot2webApplication.class, args); } @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() { //创建一个httpconnector以被使用 Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); connector.setScheme("http"); connector.setPort(8080); connector.setSecure(false); //application.yml里面配置的端口 connector.setRedirectPort(9090); return connector; }}
此时启动Spring Boot,控制台输出的效果如下:
此时访问:http://localhost:8080/test,会自动转到https://localhost:9090/test如下图:
总结:这里主要介绍了spring boot配置tomcat容器,和开启ssl实现https进行安全访问的功能。
代码地址:https://github.com/wj903829182/SpringCloudTwo/tree/master/springboot2web
- SpringBoot18-springboot的Web开发-Tomcat配置
- SpringBoot19-springboot的Web开发-Favicon配置
- 缺省配置Springboot Web应用中tomcat的启动过程
- SpringBoot17-springboot的Web开发-Web相关配置
- SpringBoot的web开发
- springboot tomcat的配置选项大全
- SpringBoot学习笔记(四) SpringBoot Web相关的自动配置
- springboot加速你的web开发
- SpringBoot20-springboot的Web开发-WebSocket
- WEB开发----springboot的登录拦截机制
- Web开发基础Tomcat的配置以及http协议概述
- SpringBoot 配置 web.xml
- SpringBoot Web配置
- SpringBoot Web开发体验
- springboot web 开发
- SpringBoot入门Web开发
- Springboot Web应用中Tomcat SSL是如何工作的
- 手动配置Tomcat 的WEB
- Java序列化,如何实现
- jade模板引擎(下)
- 第二章开启Hibernate项目--使用xml文档配置Hibernate项目
- 栈
- Unity3D游戏出现"接电话或其他系统铃声响应后,回到游戏后游戏声音失效"的问题
- SpringBoot18-springboot的Web开发-Tomcat配置
- RAID阵列
- 什么是 J#.NET-
- 数据结构实验之二叉树一:树的同构
- NoSQL入门理论
- MYSQL的联合索引的使用
- 利用一维数组 输出杨辉三角
- 《网易编程题》计算糖果
- 记一次内核soft lockup的定位记录