spring boot實戰(第七篇)內嵌容器tomcat配置

spring boot實戰(第七篇)內嵌容器tomcat配置

默認容器

spring boot默認web程序啓用tomcat內嵌容器tomcat,監聽8080端口,servletPath默認爲 / 通過需要用到的就是端口、上下文路徑的修改,在spring boot中其修改方法及其簡單;

在資源文件中配置:   
server.port=9090 
server.contextPath=/lkl

啓動spring boot

2015-10-04 00:06:55.768  INFO 609 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2015-10-04 00:06:55.844  INFO 609 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2015-10-04 00:06:55.928  INFO 609 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 9090 (http)
2015-10-04 00:06:55.930  INFO 609 --- [           main] com.lkl.springboot.Application       : Started Application in 3.906 seconds (JVM running for 4.184)

可以看出其監聽端口9090,執行
http://localhost:9090/lkl/springboot/liaokailin 成功訪問

自定義tomcat

在實際的項目中簡單的配置tomcat端口肯定無法滿足大家的需求,因此需要自定義tomcat配置信息來靈活的控制tomcat。

以定義默認編碼爲例

package com.lkl.springboot.container.tomcat;

import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * tomcat 配置
 * @author liaokailin
 * @version $Id: TomcatConfig.java, v 0.1 2015年10月4日 上午12:11:47 liaokailin Exp $
 */
@Configuration
public class TomcatConfig {

    @Bean
    public EmbeddedServletContainerFactory servletContainer() {
        TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
        tomcat.setUriEncoding("UTF-8");
        return tomcat;
    }

}

構建EmbeddedServletContainerFactory的bean,獲取到TomcatEmbeddedServletContainerFactory實例以後可以對tomcat進行設置,例如這裏設置編碼爲UTF-8

SSL配置

生成證書

keytool -genkey -alias springboot -keyalg RSA -keystore /Users/liaokailin/software/ca1/keystore
設置密碼123456

生成證書

tomcat中驗證證書是否正確

修改tomcat/conf/server.xml文件

<Connector
              protocol="org.apache.coyote.http11.Http11NioProtocol"
              port="8443" maxThreads="200"
              scheme="https" secure="true" SSLEnabled="true"
              keystoreFile="/Users/liaokailin/software/ca1/keystore" keystorePass="123456"
              clientAuth="false" sslProtocol="TLS"/>

啓動tomcat ,訪問 http://localhost:8443

https訪問

spring boot 內嵌tomcat ssl

配置資源文件

server.port=8443
server.ssl.enabled=true
server.ssl.keyAlias=springboot
server.ssl.keyPassword=123456
server.ssl.keyStore=/Users/liaokailin/software/ca1/keystore
  • server.ssl.enabled 啓動tomcat ssl配置
  • server.ssl.keyAlias 別名
  • server.ssl.keyPassword 密碼
  • server.ssl.keyStore 位置

啓動 spring boot

啓動spring boot

訪問https://localhost:8443/springboot/helloworld

訪問https

多端口監聽配置

前面啓動ssl後只能走https,不能通過http進行訪問,如果要監聽多端口,可採用編碼形式實現。

1.註銷前面ssl配置,設置配置 server.port=9090

2.修改TomcatConfig.java


package com.lkl.springboot.container.tomcat;

import java.io.File;

import org.apache.catalina.connector.Connector;
import org.apache.coyote.http11.Http11NioProtocol;
import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * tomcat 配置
 * @author liaokailin
 * @version $Id: TomcatConfig.java, v 0.1 2015年10月4日 上午12:11:47 liaokailin Exp $
 */
@Configuration
public class TomcatConfig {

    @Bean
    public EmbeddedServletContainerFactory servletContainer() {
        TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
        tomcat.setUriEncoding("UTF-8");
        tomcat.addAdditionalTomcatConnectors(createSslConnector());
        return tomcat;
    }

    private Connector createSslConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
        try {
            File truststore = new File("/Users/liaokailin/software/ca1/keystore");
            connector.setScheme("https");
            protocol.setSSLEnabled(true);
            connector.setSecure(true);
            connector.setPort(8443);
            protocol.setKeystoreFile(truststore.getAbsolutePath());
            protocol.setKeystorePass("123456");
            protocol.setKeyAlias("springboot");
            return connector;
        } catch (Exception ex) {
            throw new IllegalStateException("cant access keystore: [" + "keystore" + "]  ", ex);
        }
    }
}

通過addAdditionalTomcatConnectors方法添加多個監聽連接;此時可以通過http 9090端口,https 8443端口。

轉載請註明
http://blog.csdn.net/liaokailin/article/details/48948093

歡迎關注,您的肯定是對我最大的支持

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章