码迷,mamicode.com
首页 > 编程语言 > 详细

Spring Boot教程30——Tomcat配置

时间:2016-10-04 11:43:00      阅读:413      评论:0      收藏:0      [点我收藏+]

标签:

本节的配置方法对Tomcat、Jetty和Undertow等内嵌servlet容器都是通用的。

1.Properties配置Tomcat

关于Tomcat的所有属性都在org.springframework.boot.autoconfigure.web.ServerProperties配置类中做了定义,我们只需在application.properties配置属性做配置即可。通用的Servlet容器配置都以“server”作为前缀,而Tomcat特有配置都以“server.tomcat”作为前缀。例如:

server.port= #配置程序端口,默认为8080
server.session-timeout= #用户会话session过期时间,以秒为单位
server.context-path= #配置访问路径,默认为/
server.tomcat.uri-encoding= #配置tomcat编码,默认为UTF-8
server.tomcat.compression= #Tomcat是否开启压缩,默认为关闭off

 

2.通过代码配置Tomcat

如果需要通过代码的方式配置servlet容器,则可以注册一个实现EmbeddedServletContainerCustomizer接口的Bean;若想直接配置Tomcat、Jetty、Undertow,则可以直接定义TomcatEmbeddedServletContainerFactory、JettyEmbeddedServletContainerFactory、UndertowEmbeddedServletContainerFactory。

1>.通用配置

新建类的配置方式

package com.wisely.ch7_4;

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);
    container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/404.html"));
    container.setSessionTimeout(10,TimeUnit.MINUTES);

}
}

 

在当前已有的配置文件内添加类的Bean的方式

package com.wisely.ch7_4;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Ch74Application {

    public static void main(String[] args) {
        SpringApplication.run(Ch74Application.class, args);
    }
    
    @Component
    public static class CustomServletContainer implements EmbeddedServletContainerCustomizer{//在Spring配置中注意当前类要声明为static

        @Override
        public void customize(ConfigurableEmbeddedServletContainer container) {
            container.setPort(8888);
            container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/404.html"));
        container.setSessionTimeout(10,TimeUnit.MINUTES);
        }
    }
    
}

 

2>.特定配置

@Bean
public EmbeddedServletContainerFactory servletContainer(){
    TomcatEmbeddedServletContainerFactory factory=new TomcatEmbeddedServletContainerFactory();
    factory.setPort(8888);
    factory.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/404.html"));//404.html放置在src/main/resources/static下即可。
    factory.setSessionTimeout(10,TimeUnit.MINUTES);
    return factory;
}

 

3.替换Tomcat

Spring Boot默认采用Tomcat作为内嵌的Servlet容器,如果要使用Jetty或Undertow为servlet容器,只需修改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配置

SSL(Secure Sockets Layer,安全套接层)是为网络通信提供安全及数据完整性的一种安全协议,SSL在网络传输层对网络连接进行加密,为高层协议提供数据封装、压缩、加密等功能的支持,用于在实际数据传输开始前对通信双方进行身份认证、协商加密算法、交换加密密钥等。
在基于B/S的Web应用中,是通过https来实现SSL的。

1>.生成证书

使用SSL首先需要一个证书,这个证书既可以是自签名的,也可以是从SSL证书授权中心获得的。本例演示自签名证书的生成。
每一个JDK或者JRE里都有一个工具叫keytool,它是一个证书管理工具,可以用来生成自签名的证书。
在配置了JAVA_HOME,并将JAVA_HOME的bin目录加入到Path后,即可在控制台调用该命令:
keytool -genkey -alias tomcat
技术分享?

这个时候我们在当前目录下生成了一个.keystore隐藏文件,这就是我们要用的证书文件。

2>.Spring Boot配置SSL

添加一个index.html到src/main/resources/static下,作为测试。
将.keystore文件复制到项目的根目录,然后在application.properties中做如下的SSL的配置:

server.port=8443
server.ssl.key-store=.keystore
server.ssl.key-store-password=123456
server.ssl.keyStoreType= JKS
server.ssl.keyAlias:tomcat

 

此时启动Spring Boot,控制台输出效果如下:
技术分享?

访问https://localhost:8443

3>.http转向https

很多时候,我们访问http://www.baidu.com,但会自动转向https://www.baidu.com。要实现这个功能,我们需配置TomcatEmbeddedServletContainerFactory,并且添加Tomcat的connector来实现。
这时我们需要在配置文件里增加如下配置:

package com.wisely.ch7_4;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Ch74Application {

    public static void main(String[] args) {
        SpringApplication.run(Ch74Application.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() {
      Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
      connector.setScheme("http");
      connector.setPort(8080);
      connector.setSecure(false);
      connector.setRedirectPort(8443);
      return connector;
    }
}

 

Spring Boot教程30——Tomcat配置

标签:

原文地址:http://www.cnblogs.com/quickcodes/p/Spring-Boot-jiao-cheng30Tomcat-pei-zhi.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!