使用Spring Boot开发Web项目(二)之添加HTTPS支持

时间:2021-11-20 22:38:39

上篇博客使用Spring Boot开发Web项目我们简单介绍了使用如何使用Spring Boot创建一个使用了Thymeleaf模板引擎的Web项目,当然这还远远不够。今天我们再来看看如何给我们的Web项目添加https支持。在阅读本篇博客之前,强烈建议先读使用Spring Boot开发Web项目这篇博客,否则可能会有对Spring Boot不太了解的小伙伴看的云里雾里。

什么是https

要说https我们得先说SSL(Secure Sockets Layer,安全套接层),这是一种为网络通信提供安全及数据完整性的一种安全协议,SSL在网络传输层对网络连接进行加密。SSL协议可以分为两层:SSL记录协议(SSL Record Protocol),它建立在可靠的传输协议如TCP之上,为高层协议提供数据封装、压缩、加密等基本功能支持;SSL握手协议(SSL Handshake Protocol),它建立在SSL记录协议之上,用于在实际数据传输开始之前,通信双方进行身份认证、协商加密算法、交换加密密钥等。在Web开发中,我们是通过HTTPS来实现SSL的。HTTPS是以安全为目标的HTTP通道,简单来说就是HTTP的安全版,即在HTTP下加入SSL层,所以说HTTPS的安全基础是SSL,不过这里有一个地方需要小伙伴们注意,就是我们现在市场上使用的都是TLS协议(Transport Layer Security,它来源于SSL),而不是SSL,只不过由于SSL出现较早并且被各大浏览器支持因此成为了HTTPS的代名词,。你可以把HTTPS和SSL的关系理解成iPhone和富土康的关系,大概就是这样哈。

如果HTTPS小伙伴们不太了解,这里给小伙伴们推荐几个关于HTTPS的资料:

1.HTTPS 原理解析

2.HTTPS那些事(一)HTTPS原理

3.图解HTTPS

证书生成

使用SSL需要我们先生成一个证书,这个证书我们可以自己生成,也可以从SSL证书授权中心获得,自己生成的不被客户端认可,从授权中心获得的可以被客户端认可,提供SSL授权证书的服务商有很多,小伙伴们有兴趣可以自行查找,我这里以自己生成的证书为例。

生成方式也很简单,直接使用java自带的命令keytool来生成,生成命令如下:

keytool -genkey -alias tomcat  -storetype PKCS12 -keyalg RSA -keysize 2048  -keystore keystore.p12 -validity 3650

这里涉及到几个参数的含义我简单说一下:

1.-storetype 指定密钥仓库类型

2.-keyalg 生证书的算法名称,RSA是一种非对称加密算法

3.-keysize 证书大小

4.-keystore 生成的证书文件的存储路径

5.-validity 证书的有效期

OK,执行完上面一行命令后,在你的系统的当前用户目录下会生成一个keystore.p12文件(如果你修改了证书文件的名称那就是你修改的名字),将这个文件拷贝到我们项目的根目录下,然后修改application.properties文件,添加HTTPS支持。在application.properties中添加如下代码:

server.ssl.key-store=keystore.p12
server.ssl.key-store-password=111111
server.ssl.keyStoreType=PKCS12
server.ssl.keyAlias:tomcat

第一行指定签名文件,第二行指定签名密码,第三行指定密钥仓库类型,第四个是别名。OK,这样配置完成之后我们就可以通过HTTPS来访问我们的Web了,访问结果如下:

使用Spring Boot开发Web项目(二)之添加HTTPS支持

当然,这里我在CustomServletContainer类中将默认端口修改为8443了(这个类如果尚不清楚可以参考使用Spring Boot开发Web项目这篇文章),当然你用其他的端口也行。

HTTP自动转向HTTPS

光有HTTPS肯定还不够,很多用户可能并不知道,用户有可能继续使用HTTP来访问你的网站,这个时候我们需要添加HTTP自动转向HTTPS的功能,当用户使用HTTP来进行访问的时候自动转为HTTPS的方式。这个配置很简单,在入口类中添加相应的转向Bean就行了,如下:

   @Bean
    public EmbeddedServletContainerFactory servletContainer() {
        TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {
            @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
    public Connector httpConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        //Connector监听的http的端口号
        connector.setPort(8080);
        connector.setSecure(false);
        //监听到http的端口号后转向到的https的端口号
        connector.setRedirectPort(8443);
        return connector;
    }

这个时候当我们访问http://localhost:8080的时候系统会自动重定向到https://localhost:8443这个地址上。这里的Connector实际就是我们刚刚接触jsp时在xml中配置的Tomcat的Connector节点。当然这里能够设置的属性还有很多,具体可以参考这篇博客Tomcat中的Connector配置

案例下载:

本篇博客GitHub地址

以上。

参考资料:

1.《JavaEE开发的颠覆者 Spring Boot实战》第七章

2.Spring Boot中启动HTTPS

使用Spring Boot开发Web项目(二)之添加HTTPS支持的更多相关文章

  1. 使用Spring Boot开发Web项目

    前面两篇博客中我们简单介绍了Spring Boot项目的创建.并且也带小伙伴们来DIY了一个Spring Boot自动配置功能,那么这些东西说到底最终还是要回归到Web上才能体现出它的更大的价值,so ...

  2. 【spring boot】5.spring boot 创建web项目并使用jsp作前台页面

    贼烦的是,使用spring boot 创建web项目,然后我再idea下创建的,but 仅仅启动spring boot的启动类,就算整个项目都是好着的,就算是能够进入controller中,也不能成功 ...

  3. Spring Boot开发Web应用之Thymeleaf篇

    前言 Web开发是我们平时开发中至关重要的,这里就来介绍一下Spring Boot对Web开发的支持. 正文 Spring Boot提供了spring-boot-starter-web为Web开发予以 ...

  4. 基于Spring boot的web项目搭建教程(一)

    前言: 本教程参考了大量前辈的代码,在此不方便一一列举.本教程使用IDEA开发工具搭建项目,对于本人的IDEA已经集成了某些插件,比如Lombok,Thymeleaf,yml等插件,这些插件不在文中提 ...

  5. spring boot 搭建web项目常见五种返回形式

    在web项目中一般常见的五种返回形式: 返回页面,使用模板引擎,spring boot推荐使用thymeleaf,类似的还有freemarker等. 返回字符串(json),一般用于完全的前后端分离开 ...

  6. Spring Boot搭建Web项目常用功能

    搭建WEB项目过程中,哪些点需要注意: 1.技术选型: 前端:freemarker.vue 后端:spring boot.spring mvc 2.如何包装返回统一结构结果数据? 首先要弄清楚为什么要 ...

  7. Spring Boot开发Web应用之JSP篇

    前言 上一篇介绍了Spring Boot中使用Thymeleaf模板引擎,今天来介绍一下如何使用SpringBoot官方不推荐的jsp,虽然难度有点大,但是玩起来还是蛮有意思的. 正文 先来看看整体的 ...

  8. Spring Boot开发Web应用

    静态资源访问 在我们开发Web应用的时候,需要引用大量的js.css.图片等静态资源. 默认配置 Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则: /s ...

  9. 如何把kotlin+spring boot开发的项目部署在tomcat上

    本文只讲部署过程,你首先要保证你的程序能在IDE里跑起来: 先看看你的application.properties中设置的端口号与你服务器上tomcat的端口号是否一致 server.port=80 ...

随机推荐

  1. kmdjs和循环依赖

    循环依赖 循环依赖是非常必要的,有的程序写着写着就循环依赖了,可以提取出一个对象来共同依赖解决循环依赖,但是有时会破坏程序的逻辑自封闭和高内聚.所以没解决好循环依赖的模块化库.框架.编译器都不是一个好 ...

  2. Python面向对象高级之类的特殊成员

    上文介绍了Python的类成员以及成员修饰符,从而了解到类中有字段.方法和属性三大类成员,并且成员名前如果有两个下划线,则表示该成员是私有成员,私有成员只能由类内部调用.无论人或事物往往都有不按套路出 ...

  3. macosx安装MySQLdb

    折腾了半天,记录一下. 先按照这个步骤安装mysql-python 如果python setup.py install 时候出现clang 错误,运行 python -E setup.py insta ...

  4. MySQL Replication 优化和技巧、常见故障解决方法

    MySQL 主从同步错误(error)解决(转) sql_slave_skip_counter参数 附: 一些错误信息的处理,主从服务器上的命令,及状态信息. 在从服务器上使用show slave s ...

  5. 玩转iOS开发 - 多线程开发

    前言 本文主要介绍iOS多线程开发中使用的主要技术:NSOperation, GCD. NSThread, pthread. 内容依照开发中的优先推荐使用的顺序进行介绍,涉及多线程底层知识比較多的NS ...

  6. js使用CSS将图片转换成黑白(灰色、置灰)

    详细内容请点击 可能早就知道,像汶川这种糟糕的日子网站全灰在IE下是可以轻松实现的(filter: gray;),不过,当时,其他浏览器是无解的. 不过,时代发展,如今,CSS3的逐步推进,我们也开始 ...

  7. linux - 文件查找及压缩

    文件查找: 1.  which    查找可以执行文件,只搜索$PATH里的目录 $ which ls /bin/ls which只搜索$PATH里的目录,如果搜索当前目录的文件是没有任何结果的 $ ...

  8. hdu1391(Number Steps )

    Problem Description Starting from point (0,0) on a plane, we have written all non-negative integers ...

  9. Effective C++ 读书总结

    (中文第三版 侯捷 译) 这本书在C++领域也是大名鼎鼎,在微博看到有人说,如果以前学过C语言,那只需花一天时间把 Effective C++ 看一遍,然后再看 leveldb代码(http://t. ...

  10. Linux升级python3之后yum不能正常使用解决方法一:重新配置yum源

    [转]linux下yum安装及配置 分步阅读 公司使用的是linux搭建服务器,linux安装软件能够使用yum安装依赖包是一件非常简单而幸福的事情,所以这里简单介绍一下linux安装yum源流程和操 ...