`

SpringBoot2.0启用https协议

阅读更多
  SpringBoot2.0之后,启用https协议的方式与1.*时有点儿不同,贴一下代码。

  我的代码能够根据配置参数中的condition.http2https,确定是否启用https协议,如果启用https协议时,会将所有http协议的访问,自动转到https协议上。

一、启动程序
package com.wallimn.iteye.sp.asset;

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.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;

/**
 * SpringBoot2.0启动程序
 * @author wallimn,http://wallimn.iteye.com
 *
 */
@SpringBootApplication
public class AssetApplication {

	public static void main(String[] args) {
		SpringApplication.run(AssetApplication.class, args);
	}
	//如果没有使用默认值80
    @Value("${http.port:80}")
    Integer httpPort;

    //正常启用的https端口 如443
    @Value("${server.port}")
    Integer httpsPort;

    // springboot2 写法
    @Bean
    @ConditionalOnProperty(name="condition.http2https",havingValue="true", matchIfMissing=false)
    public TomcatServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = 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);
            }
        };
        tomcat.addAdditionalTomcatConnectors(httpConnector());
        return tomcat;
    }

    @Bean
    @ConditionalOnProperty(name="condition.http2https",havingValue="true", matchIfMissing=false)
    public Connector httpConnector() {
    	System.out.println("启用http转https协议,http端口:"+this.httpPort+",https端口:"+this.httpsPort);
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        //Connector监听的http的端口号
        connector.setPort(httpPort);
        connector.setSecure(false);
        //监听到http的端口号后转向到的https的端口号
        connector.setRedirectPort(httpsPort);
        return connector;
    }}


二、配置文件

1.使用http协议时的配置
server.port=80

2.使用https及http协议时的配置
server.port=443
server.ssl.key-store=classpath:keystore.p12
server.ssl.key-store-password=your-password
server.ssl.keyStoreType=PKCS12
server.ssl.keyAlias=your-cert-alias
condition.http2https=true
http.port=80
分享到:
评论

相关推荐

    SpringBoot2.0如何启用https协议

    SpringBoot 2.0 启用 HTTPS 协议详解 在本文中,我们将详细介绍如何在 SpringBoot 2.0 中启用 HTTPS 协议。HTTPS 协议是目前最为流行的加密协议,能够保护用户的隐私和安全。在 SpringBoot 2.0 中启用 HTTPS 协议...

    springboot2.0+jpa+mysql

    综上所述,"springboot2.0+jpa+mysql" 的整合涉及到 Spring Boot 框架的自动配置能力、JPA 的 ORM 机制以及 MySQL 数据库的连接与操作。这三者的结合使得开发人员能快速构建基于 Java 的数据驱动应用程序,同时保持...

    springboot2.0-dubbo-demo

    《SpringBoot 2.0与Dubbo 2.6.2整合实践》 在现代企业级应用开发中,SpringBoot和Dubbo都是不可或缺的技术组件。SpringBoot以其强大的自动化配置和简洁的开发体验,大大简化了Java应用的启动和运行过程。而Dubbo,...

    springboot2.0-oauth2-master111.7z

    《SpringBoot2.0与OAuth2深度整合指南》 在当今的互联网开发中,安全性和权限管理是不可或缺的重要环节。SpringBoot作为Java领域备受推崇的轻量级框架,结合OAuth2这一广泛使用的授权协议,可以构建出高效、安全的...

    SpringBoot2.0整合Druid连接池详细步骤.docx

    SpringBoot2.0 整合 Druid 连接池详细步骤 SpringBoot2.0 整合 Druid 连接池是目前流行的解决方案之一,Druid 是阿里巴巴开源的数据库连接池,提供了高效、安全、可靠的数据库连接解决方案。本文将详细介绍 ...

    springBoot2.0+mybatis支持多数据源+shiro

    本项目主题是"springBoot2.0+mybatis支持多数据源+shiro",这涉及到Java开发中的几个关键组件的集成与应用。 首先,让我们来详细了解一下这些技术: **SpringBoot 2.0**:这是Spring框架的一个子项目,旨在简化...

    springboot 2.0 集成 Activiti5.22包括流程跟踪和在线设计

    SpringBoot 2.0 集成 Activiti5.22是企业级应用开发中一个常见的任务,因为这两个框架的结合能够提供强大的工作流管理和流程自动化能力。在本项目中,我们将深入探讨如何将SpringBoot的灵活性与Activiti的工作流引擎...

    China-Spring#springboot-document#SpringBoot 2.0.X官方文档-007-使用@Spr

    可以使用一个@SpringBootApplication注解来启用这三个特性,即:@EnableAutoConfiguration:SpringBoot 2.0

    WebService整合SpringBoot2.0(csdn)————程序.pdf

    【WebService整合SpringBoot2.0】的教程主要涵盖了在SpringBoot2.0环境中集成和使用WebService的基本步骤。这里我们将深入探讨生产者和消费者的构建过程。 ### 一、生产者 1. **依赖**: 在SpringBoot项目中,...

    SpringBoot2.0-Actuator监控参数说明

    SpringBoot2.0-Actuator是Spring Boot框架中的一个强大组件,主要负责提供应用程序的监控和管理能力。在Spring Boot应用中,Actuator通过暴露一系列的端点(endpoints),使得开发者可以方便地查看和操作应用程序的...

    SpringBoot2.0开发WebSocket应用完整示例

    在本示例中,我们将探讨如何使用Spring Boot 2.0开发WebSocket应用程序。WebSocket协议是一种在客户端和服务器之间实现全双工通信的标准,允许数据实时双向传输,这在需要实时更新的应用场景,如聊天应用、在线游戏...

    基于Springboot2.0的常用框架选型集成入门手册

    - **启用熔断**:在启动类中配置 `@EnableCircuitBreaker` 注解启用熔断功能。 #### 配置 Apollo 配置中心 Apollo 是携程网开源的一个分布式配置管理平台,能够集中化管理跨环境跨集群的应用配置。它提供了丰富的...

    SpringBoot2.0-Actuator监控参数说明 - 最全文档.docx

    为了在Spring Boot 2.0项目中启用Actuator功能,需要在`pom.xml`文件中添加`spring-boot-starter-actuator`依赖。当使用`spring-boot-starter-parent`作为父POM且版本为2.0.2.RELEASE时,Actuator也会被自动引入到...

    Springboot2.0处理自定义异常并返回json

    启用`include-exception`属性,使得Spring Boot在发生异常时不会直接返回500状态码,而是将异常信息包含在响应中: ```yaml server: error: include-exception: true ``` 最后,我们编写一个简单的测试控制器`...

    springboot2.0以上调度器配置线程池的实现

    在 Spring Boot 2.0 中,我们可以使用 `@EnableScheduling` 注解来启用 tarea 调度器,但是默认情况下,调度器的配置为单线程的。这是因为 `ScheduledTaskRegistrar` 类中 default 创建了一个单线程的 ...

    SpringBoot2.0 ZipKin示例代码

    在本文中,我们将深入探讨SpringBoot 2.0与ZipKin的集成,这是一个用于收集和分析微服务架构中延迟数据的分布式追踪系统。首先,理解ZipKin的基本概念至关重要。ZipKin是基于Google Dapper论文设计的,其核心功能是...

    spring boot 2.0.1中文文档.pdf

    文档讨论了使用`@SpringBootApplication`注解来启用自动配置、组件扫描以及Bean定义。运行Spring Boot应用程序的方式也包括了从IDE中运行、作为打包后的应用程序运行,以及使用Maven或Gradle插件。 ### 开发者工具 ...

    springboot2.0整合dubbo的示例代码

    - `web`模块的`pom.xml`文件需要引入`dubbo-service`模块(即服务提供者或消费者)以及`spring-boot-starter-web`,以启用Spring Boot的Web功能。 4. **配置Dubbo** - 在Spring Boot的`application.properties`或...

    springboot2使用ehcache缓存

    3. **启用缓存注解**:在需要缓存的方法上添加`@Cacheable`,`@CacheEvict`,`@CachePut`等注解。例如: ```java @Service public class UserService { @Cacheable(value = "users", key = "#id") public User ...

    springboot2.0.3 的redis共享session的demo

    在这个"springboot2.0.3 的redis共享session的demo"中,我们看到如何利用Redis这个高效、分布式的数据存储系统来实现session的跨服务器共享。 首先,我们要理解什么是session。Session是Web服务器用来跟踪用户状态...

Global site tag (gtag.js) - Google Analytics