博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Spring Boot开发Web项目(二)之添加HTTPS支持
阅读量:4361 次
发布时间:2019-06-07

本文共 3075 字,大约阅读时间需要 10 分钟。

上篇博客我们简单介绍了使用如何使用Spring Boot创建一个使用了Thymeleaf模板引擎的Web项目,当然这还远远不够。今天我们再来看看如何给我们的Web项目添加https支持。在阅读本篇博客之前,强烈建议先读这篇博客,否则可能会有对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.

2.
3.

证书生成

使用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.p12server.ssl.key-store-password=111111server.ssl.keyStoreType=PKCS12server.ssl.keyAlias:tomcat

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

这里写图片描述
当然,这里我在CustomServletContainer类中将默认端口修改为8443了(这个类如果尚不清楚可以参考这篇文章),当然你用其他的端口也行。

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节点。当然这里能够设置的属性还有很多,具体可以参考这篇博客。

案例下载:

以上。

参考资料:

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

2.

转载于:https://www.cnblogs.com/qitian1/p/6461639.html

你可能感兴趣的文章
hdu--1540 Tunnel Warfare(线段树+区间合并)
查看>>
通过命令给Linux(CentOS)分区
查看>>
Sprint1规划暨first stand up meeting
查看>>
python接口自动化3-自动发帖(session)
查看>>
复杂问题的简单抽象:魔兽世界中的兔子们
查看>>
那些美到极致的语言!
查看>>
Xamarin的不归路-ios模拟器没有键盘
查看>>
【云笔记】群晖DS218+ NoteStation 折腾
查看>>
jdk安装配置
查看>>
四、RocketMq简单的消费者和生产者(示例代码)
查看>>
json介绍
查看>>
Maven编译unmappable character for encoding Cp1252问题
查看>>
xftp上传文件失败,执行程序发现磁盘满了:No space left on device
查看>>
duplicate symbols for architecture i386 问题?
查看>>
[BZOJ]1027 合金(JSOI2007)
查看>>
poj 1696 Space Ant (几何 : 叉积 应用 + dfs)
查看>>
MySQL:按前缀批量删除表格
查看>>
Route学习笔记之Area的Route注册
查看>>
构建之法--软件工程师自我测评表
查看>>
电子书搜索
查看>>