`

spring boot进行开启SSL安全验证(application.properties不能配置两个端口)

 
阅读更多
1)开启SSL(HTTPS)
默认SpringBoot启动8080端口的HTTP服务,通过以下配置可以开启8443端口的HTTPS服务。
src/main/resources/application.properties
server.port=8443 
server.ssl.key-store=keystore.p12 
server.ssl.key-store-password=password 
server.ssl.keyStoreType=PKCS12 
server.ssl.keyAlias=tomcat


但是Spring Boot不支持通过application.properties同时支持HTTP和HTTPS。
可以通过在application.properties中设置HTTPS,在代码中添加Connector支持HTTP来实现。

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.context.embedded.EmbeddedServletContainerFactory;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;

/**
 * https配置
 *
 */
@Configuration
public class SSLConfig {

    @Value("${server.ssl.urls}")
    String urls;
    @Value("${server.non-ssl-port}")
    int port;
    @Value("${server.port}")
    int sslPort;
    // 配置8080端口服务
    @Bean
    public EmbeddedServletContainerFactory servletContainer(Connector httpConnector) {
        TomcatEmbeddedServletContainerFactory container = new TomcatEmbeddedServletContainerFactory() {
            @Override
            protected void postProcessContext(Context context) {
                SecurityConstraint constraint = new SecurityConstraint();
                constraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection collection = new SecurityCollection();
                if(!StringUtils.isEmpty(urls)) {
                    String[] urlArr = urls.split(",");
                    for(String url : urlArr) {
                        collection.addPattern(url);
                    }
                }
                constraint.addCollection(collection);
                context.addConstraint(constraint);
            }
        };
        container.addAdditionalTomcatConnectors(httpConnector);
        return container;
    }

    @Bean
    public Connector httpConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(port);
        connector.setSecure(false);
        // 跳转到SSL验证
        connector.setRedirectPort(sslPort);
        return connector;
    }
}



分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    springboot参考指南

    配置两个数据源 iii. 67.3. 使用Spring Data仓库 iv. 67.4. 从Spring配置分离@Entity定义 v. 67.5. 配置JPA属性 vi. 67.6. 使用自定义的EntityManagerFactory vii. 67.7. 使用两个EntityManagers viii. 67.8. 使用...

    利用 spring mail 通过 gmail(SSL) 发邮件

    在Spring Boot应用中,可以在`application.properties`或`application.yml`中配置: ```properties spring.mail.host=smtp.gmail.com spring.mail.port=465 spring.mail.protocol=smtp spring.mail.username=your-...

    spring Boot 报错RedisConnectionFailureException

    在默认情况下,它会尝试连接到本地的6379端口,如果你的Redis实例不在那里,或者使用的是其他设置,你需要在`application.properties`或`application.yml`中进行相应的配置。 1. **配置问题**: - `spring.redis....

    spring-boot-sources09-https-http.zip

    - Spring Boot默认监听8080端口,可以通过`server.port`属性在application.properties或application.yml中自定义端口。 - 使用`@RestController`注解创建RESTful API,通过`@GetMapping`、`@PostMapping`等处理...

    Spring Boot实现Undertow服务器同时支持HTTP2、HTTPS的方法

    首先,我们需要在application.properties文件中添加以下配置: server.port=443 server.ssl.enabled=true server.ssl.key-store=classpath:keystore.p12 server.ssl.key-store-password=password server.ssl.key-...

    Spring Boot 中一些关键参数配置的详细介绍.docx

    `properties` 文件使用键值对的方式进行配置,例如:`key=value`;而 `YAML` 文件则支持更复杂的结构,如列表、嵌套对象等。 **2. 示例** - **`properties` 示例** ```properties # application.properties ...

    spring-boot-mail邮件发送服务 v1.0.zip

    这些属性包括SMTP服务器地址(`spring.mail.host`)、端口号(`spring.mail.port`)、用户名(`spring.mail.username`)、密码(`spring.mail.password`)以及是否开启SSL(`spring.mail.properties.mail.smtp....

    Spring启动Tomcat的https和http双端口的案例

    首先,我们需要在Spring Boot的`application.properties`或`application.yml`配置文件中添加关于Tomcat服务器的配置。对于HTTP端口,通常默认为8080,如果需要自定义,可以设置`server.port`属性。对于HTTPS端口,...

    spring boot配置ssl实现HTTPS的方法

    接下来,我们需要在 Spring Boot 项目中配置 SSL/TLS。我们可以在 application.properties 文件中添加以下配置: `server.port=8888` `server.tomcat.uri-encoding=utf-8` `server.servlet.context-path=/demo` `...

    spring-boot-sample-tomcat-ssl:演示 Spring Boot SSL 配置问题

    2. **配置Spring Boot**:在Spring Boot的`application.properties`或`application.yml`中,你需要配置SSL相关的属性。例如,指定密钥库文件路径、密码以及别名: ```properties server.ssl.key-store=classpath:...

    15. Spring Boot使用Druid和监控配置【从零开始学Spring Boot】

    在本篇【从零开始学Spring Boot】系列中,我们将探讨如何在Spring Boot项目中集成并配置Druid数据源以及其监控功能。Druid是一个强大的数据库连接池,它提供了丰富的监控、扩展性以及性能优化特性。Spring Boot简化...

    Spring boot 配置参数一览.pdf

    Spring Boot 是一个开源的 Java 基础框架,主要用于快速、简便地创建独立的、生产级别的基于Spring的应用程序。它使用“约定优于配置”的原则,让开发者能够更快地构建项目。Spring Boot 的配置系统非常灵活,允许...

    spring boot https (1.0和2.0)

    Spring Boot 是一个流行的Java开发框架,它简化了创建生产级的、基于Spring的应用程序。集成HTTPS是Spring Boot项目中的一项重要安全配置,因为HTTPS能够确保数据传输的安全性,防止中间人攻击,保护用户隐私。本篇...

    springboot工程验证SSL证书

    2. **配置SSL证书**:在Spring Boot应用中,我们通常在`application.properties`或`application.yml`中配置SSL相关的属性。例如: ```properties server.port=8443 # 使用默认的HTTPS端口 server.ssl.key-store-...

    http-->https后端Java接口spring boot项目配置文件及生成证书的方法.7z

    2. **配置Spring Boot**:在Spring Boot的application.properties或application.yml文件中,我们需要配置HTTPS的相关参数,包括证书路径、密钥库类型、密码等。例如: ```properties server.port=8443 server.ssl...

    SpringBoot配置详解

    在本文中,我们详细介绍了Spring Boot应用程序的Properties配置,包括配置文件、Profiles、应用程序设置、日志记录、身份认证、嵌入式服务器配置、SSL/TLS配置和Tomcat配置等方面。了解这些配置项,可以帮助开发者更...

    springboot整合quartz定时任务yml文件配置方式

    接下来,我们关注YAML配置文件,通常在`application.yml`或`application.properties`中进行设置。Quartz的配置主要涉及以下几个方面: 1. **配置Quartz实例**:在`spring.quartz`下定义Quartz的相关属性,如是否...

    springboot中的配置文件样板

    Spring Boot支持通过`application-{profile}.properties`或`application-{profile}.yml`文件来实现不同环境的配置。例如,你可以有`application-dev.properties`(开发环境)、`application-test.properties`(测试...

    spring boot整合mongodb

    2. **配置MongoDB**: 在Spring Boot应用中整合MongoDB,首先需要在`application.properties`或`application.yml`文件中配置MongoDB的相关信息,包括连接地址、端口、数据库名称等。例如: ``` spring.data.mongodb...

    sprintboot-mailsprintboot-mailsprintboot-mail

    默认情况下,它会尝试使用系统环境变量或`application.properties`/`application.yml`中的`spring.mail.*`属性进行配置。例如: ```properties # application.properties spring.mail.host=smtp.gmail.com spring....

Global site tag (gtag.js) - Google Analytics