文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

SpringBoot中支持Https协议的实现

2023-01-28 06:03

关注

一、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;


@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协议内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯