SpringBoot中支持Https协议的实现

 更新时间:2023年01月19日 09:10:07   作者:Asurplus  
本文主要介绍了SpringBoot中支持Https协议的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、https 简介

超文本传输安全协议(HyperText Transfer Protocol Secure),缩写:HTTPS;常称为 HTTP over TLS、HTTP over SSL 或 HTTP Secure)是一种通过计算机网络进行安全通信的传输协议。HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包。HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。这个协议由网景公司(Netscape)在 1994 年首次提出,随后扩展到互联网上。

二、获取 https 证书

我们可以直接借助 Java 自带的 JDK 管理工具 keytool 来生成一个免费的 https 证书

1、进入jdk安装目录,我的是在C:\Program Files\Java\jdk1.8.0_201\bin

cd /C:\Program Files\Java\jdk1.8.0_201\bin

2、执行以下命令获取数字证书

keytool -genkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore D:\httpsKey.p12 -validity 365

命令含义如下:

genkey:表示要创建一个新的密钥。
alias:表示 keystore 的别名。
keyalg:表示使用的加密算法是 RSA ,一种非对称加密算法。
keysize:表示密钥的长度。
keystore:表示生成的密钥存放位置。
validity:表示密钥的有效时间,单位为天。
其中 D:\httpsKey.p12 是生成证书文件的地址

按照图中步骤进行操作:

证书生成过程

3、以上步骤执行完后,我们在D盘会发现一个 httpsKey.p12 的文件,如下:

http证书文件

三、在 SpringBoot 中引入 https

1、我们将生成的 httpsKey.p12 拷贝到SpringBoot项目中的 resources 目录下

2、并在配置文件 application.yml 中加入以下配置:

server:
  port: 8080
  ssl:
    key-store: classpath:httpsKey.p12
    key-alias: tomcathttps
    key-store-password: 123456

key-store表示密钥文件名。
key-alias表示密钥别名。
key-store-password就是在cmd命令执行过程中输入的密码

3、我们在 resources 目录下的 templates 目录下加入一个index.html文件,文件内容:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>主页面</title>
</head>
<body>
<h1>hello https!!!</h1>
</body>
</html>

4、启动项目,访问http://localhost:8080,此时会出现:

bad request

我们使用https协议来访问:https://localhost:8080
此时页面显示:

不是私密连接

这是因为我们自己生成的 https 证书不被浏览器认可,(实际项目中只需要更换一个被浏览器认可的 https 证书即可),我们直接点击继续访问就可以了:

hello https

这样我们就成功的以https协议访问了项目

四、请求转发

考虑到 Spring Boot 不支持同时启动 HTTP 和 HTTPS ,为了解决这个问题,我们这里可以配置一个请求转发,当用户发起 HTTP 调用时,自动转发到 HTTPS 上,配置文件如下:

package com.zyxx.youth.config;

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.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @ClassName RequestConfig
 * 请求转发,当用户发起 HTTP 调用时,自动转发到 HTTPS 上
 * @Author Lizhou
 * @Date 2019-09-19 12:17:17
 * @Version 1.0
 **/
@Configuration
public class RequestConfig {
    @Bean
    TomcatServletWebServerFactory tomcatServletWebServerFactory() {
        TomcatServletWebServerFactory factory = 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);
            }
        };
        factory.addAdditionalTomcatConnectors(createTomcatConnector());
        return factory;
    }

    private Connector createTomcatConnector() {
        Connector connector = new
                Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        // Http 的请求端口为 8081
        connector.setPort(8081);
        connector.setSecure(false);
        // https 的端口为 8080
        connector.setRedirectPort(8080);
        return connector;
    }
}

在这里,我们配置了 Http 的请求端口为 8081,所有来自 8081 的请求,将被自动重定向到 8080 这个 https 的端口上。当我们再去访问 http 请求,就会自动重定向到 https。

到此这篇关于SpringBoot中支持Https协议的实现的文章就介绍到这了,更多相关SpringBoot支持Https协议内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go Java算法之找不同示例详解

    Go Java算法之找不同示例详解

    这篇文章主要为大家介绍了Go Java算法之找不同示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Maven deploy plugin使用方式

    Maven deploy plugin使用方式

    这篇文章主要介绍了Maven deploy plugin使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • IntelliJ IDEA 关闭多余项目的操作方法

    IntelliJ IDEA 关闭多余项目的操作方法

    这篇文章主要介绍了IntelliJ IDEA 关闭多余项目的操作方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • mybatis之foreach用法详解

    mybatis之foreach用法详解

    这篇文章主要介绍了mybatis之foreach用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • 玩转spring boot MVC应用(2)

    玩转spring boot MVC应用(2)

    玩转spring boot,如何快速搭建一个MCV程序?这篇文章为大家详细主要介绍了一个MCV程序的快速搭建过程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • 图解Java排序算法之快速排序的三数取中法

    图解Java排序算法之快速排序的三数取中法

    这篇文章主要为大家详细介绍了Java排序算法之快速排序的三数取中法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • spring security自定义决策管理器

    spring security自定义决策管理器

    这篇文章主要介绍了spring security自定义决策管理器的实现代码,需要的朋友参考下吧
    2017-09-09
  • Java实现两人五子棋游戏(六) 行棋方变换

    Java实现两人五子棋游戏(六) 行棋方变换

    这篇文章主要为大家详细介绍了Java实现一个简单的两人五子棋游戏,行棋方变换,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • java:抽象类与模板方法模式详解

    java:抽象类与模板方法模式详解

    这篇文章主要介绍了Java抽象类的构造模板模式用法,结合实例形式分析了java使用抽象类构造模板模式相关操作技巧,需要的朋友可以参考下
    2021-09-09
  • 剖析SpringCloud Feign中所隐藏的坑

    剖析SpringCloud Feign中所隐藏的坑

    这篇文章主要为大家介绍了剖析SpringCloud Feign中所隐藏的坑示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08

最新评论