另外一个普遍的情况是在应用中会有两份个HTTP端口连接,一个是HTTP,另外一个是HTTPS。

3.5.1准备工作

为了创建HTTPS的连接,我们需要创建在自己的电脑上创建证书,这个证书可以加密和解密在SSL的交流过程中。

如果你是Unix或Mac,执行以下命令创建证书:$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA

如果你是windows,那么,先进入jdk安装的路径,即JAVA_HOME的bin目录下,然后执行以下的命令:keytool -genkey -alias tomcat -keyalg RSA。

执行命令后,你还要输入信息,根据提示来填写。不过我们密码就设置为changeit,当然你也可以自己定义。都填写好了之后,你可以在C:\Users\*目录下看到名称为.keystore的文件。

3.5.2代码实现

keystore创建之后,我们需要创建配置文件为了给HTTPS的连接器,例如端口或其它的。之后, 我们将会创建配置属性连接对象和使用它到我们新的连接器中。具体步骤如下:

  1. 首先,我们创建tomcat.https.properties文件在src/main/resources目录下。

custom.tomcat.https.port=8443
custom.tomcat.https.secure=true
custom.tomcat.https.scheme=https
custom.tomcat.https.ssl=true
custom.tomcat.https.keystore=${user.home}/.keystore
custom.tomcat.https.keystore-password=changeit

2.接着,我们创建静态的类,名称为TomcatSslConnectorProperties在我们的WebConfiguration类中。

@ConfigurationProperties(prefix = "custom.tomcat.https")
public static class TomcatSslConnectorProperties {
private Integer port;
private Boolean ssl= true;
private Boolean secure = true;
private String scheme = "https";
private File keystore;
private String keystorePassword;
//Skipping getters and setters to save space, but we do need them
public void configureConnector(Connector connector) {
if (port != null)
connector.setPort(port);
if (secure != null)
connector.setSecure(secure);
if (scheme != null)
connector.setScheme(scheme);
if (ssl!= null)
connector.setProperty("SSLEnabled", ssl.toString());
if (keystore!= null && keystore.exists()) {
connector.setProperty("keystoreFile",
keystore.getAbsolutePath());
connector.setProperty("keystorePassword", keystorePassword);
}
}
}

3.现在我们需要将我们的tomcat.http.properties文件作为Spring Boot的属性资源,而且与TomcatSslConnectorProperties相结合。

@Configuration
@PropertySource("classpath:/tomcat.https.properties")
@EnableConfigurationProperties(WebConfiguration.TomcatSslConnectorPrope
rties.class)
public class WebConfiguration extends WebMvcConfigurerAdapter {...}

4.最后,我们需要在WebConfiguration中创建EmbeddedServletContainerFactor作为Spring 的bean,这个类将会添加HTTPS作为连接器。

@Bean
public EmbeddedServletContainerFactory
servletContainer(TomcatSslConnectorProperties properties) {
TomcatEmbeddedServletContainerFactory tomcat = new
TomcatEmbeddedServletContainerFactory();
tomcat.addAdditionalTomcatConnectors(createSslConnector(properties)
);
return tomcat;
}

private Connector createSslConnector(TomcatSslConnectorProperties
properties) {
Connector connector = new Connector();
properties.configureConnector(connector);
return connector;
}

注意,Spring Boot2.x以上的版本servletContainer这个方法应该如下写:

// springboot2 写法

@Bean

public TomcatServletWebServerFactory servletContainer(TomcatSslConnectorProperties properties)

{

TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();

tomcat.addAdditionalTomcatConnectors(createSslConnector(properties));

return tomcat;

}

5.启动程序,访问地址:https://localhost:8443/internal/tomcat.https.properties,你将会看到。

3.5.3代码说明

这代码中,我们创建了tomcat.https.properties和TomcatSslConnectorProperties,并将二者结合起来。读者可以看到,TomcatSslConnectorProperties中的参数都在tomcat.https.rpoperties中已经定义好了。

@ConfigurationProperties(prefix=”custom.tomcat.https”)在方法TomcatSslConnectorProperties上注释是个重要的地方。它告诉Spring Boot自动去装配前缀为custom.tomcat.https的属性,这些属性的字段也声明在TomcatSslConnectorProperties中,而且这些属性在灶中还要声明getter和setter的方法。同时,Spring 在装配时,还要自动去配置参数的类型。例如,custom.tomcat.https.keystore会自动匹配为File的作用对象。(这样的转换也可以用于我们自定义的属性类型。)

我们声明一系列的参数在tomcat.https.properties文件中告诉Spring Boot去载入这些参数。这个过程是通过我们加入了这行代码@PropertySource(“classpath:/tomcat.https.properties”)在WebConfiguration类上面。@EnableConfigurationProperties(WebConfiguration.TomcatSslConnectorProperties.class)这行代码告诉Spring Boot自动创建TomcatSslConnectorProperties实例来使用。

我们创建EmbeddedServletContainerFactory的bean提供给Spring Boot的bean工厂去创建EmbeddedServletContainer,方便configureConnector(Connector connector)方法去封装放入属性值。

3.5用户访问使用HTTPS相关推荐

  1. 腾讯云CDN2023年1月5日起,将按用户访问的 HTTPS 请求数次数单独计费,对我有影响吗?

    你需要知道的计费关键点: 若您 CDN 产品开启 HTTPS 服务,将按 HTTPS 请求数次数单独计费:每月300万次内是免费的. 高于300万次的次数按0.05/万次计费. 每访问一个页面,可以产 ...

  2. 炫酷,SpringBoot+Echarts实现用户访问地图可视化(附源码)

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 SpringBoot+Echarts用户访问地图可视化 意义 在常 ...

  3. linux搭建vsftpd虚拟用户访问

    配置vsftpd服务 FTP服务器默认匿名可以访问. 1.搭建yum仓库   [root@accp~]# vim /etc/yum.repos.d/dvd.repo   [server]   name ...

  4. DFS分布式文件系统 不同用户访问不同服务器修改同一文件 解决方案

    当两个用户在不同的服务器上同时更新同一个文件的时候,会出现什么情况? 场景分析: 两台服务器(10.205.8.54)和(10.205.8.55),已经安装了DFS命名空间服务器,且已经能够实现容错和 ...

  5. ASP.NET Core奇遇记:无用户访问,CPU却一直100%

    这是5月11日遇到的一个问题,1台1核1G阿里云Linux服务器运行着生产环境中的ASP.NET Core站点,出现CPU 100%问题. 开始以为是这台服务器负载高引起的,于是将这台服务器从负载均衡 ...

  6. 一步一步SharePoint 2007之八:允许所有域用户访问网站

    特别提醒的是,这里不是逐个逐个地允许域用户访问,而是一次性允许所有域用户都可以访问网站. 这里说的一次性允许所有域用户都可以访问,实际上就是允许域用户组可以访问网站.这样做的好处嘛,哈哈,我只要加一次 ...

  7. 如何记录网内用户访问了哪些网站

    导言 网络安全的"管"与"控"一直以来备受企业网管.中小办公用户和家庭用户的关注. 如何能让一台设备通过"简单"的操作对网络进行有效地管控呢 ...

  8. RHEL4- WEB服务(十二)用户访问apache服务器认证

    RHEL4- WEB服务(十二)用户访问apache服务器认证   有些时候网站上的内容不是希望所有的用户都可以访问,由于网页内容性质的不同,会对来访的用户有所分类,网站的提供方希望部分网页内容只提供 ...

  9. js记录用户访问页面和停留时间

    1.setInterval setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式. setInterval(code,millisec[,"lang" ...

  10. 网站用户访问速度监测分析项目

     刚来新公司不久做运维开发,本为以为要继续做我的开源软件开发,结果领导给分了个以前基本从来没考虑的任务,监测用户访问我们网站的速度,没错,是监测所有的用户访问我们网站的速度. 刚来新公司不久做运维 ...

最新文章

  1. Oracle 11.2.0.4 x64 RAC扩展存储空间
  2. 使用 Jwt-Auth 实现 API 用户认证以及无痛刷新访问令牌
  3. Spring Boot 启动,1 秒搞定!
  4. 攻击者使用“非恶意软件”也能识别,将在RSA 2017上发布的新技术
  5. 1.关于UltraEdit中的FTP和Tenent配置,UE远程连接Linux进行文件操作
  6. gfi截图_GFI Backup Home Edition是Windows的免费数据备份实用程序
  7. NAND FLASH读写原理
  8. 简约几何海报背景设计素材,可盐可甜
  9. fiddler修改支付金额_支付漏洞总结
  10. Java基础学习总结(111)——Java虚拟机JVM总结大全
  11. 浅谈js与jq给新增元素动态绑定事件(事件委托)
  12. smalot-bootstrap-datetimepicker 使用心得
  13. sql中 replace函数
  14. NumberFormat 的使用
  15. 大学心理学课本_大学心理学专业用的是什么教材 名字叫什么
  16. steam搬砖项目,运用汇率差赚钱,利润可达30%
  17. Windows Server 2012 R2 安装 Office2016 和 Visual Studio 2015的问题
  18. ceph 集群报 mds cluster is degraded 故障排查
  19. 移动和包不能激活NFC问题
  20. 智能对话系统:Unit对话API

热门文章

  1. svn unable to connect to a repository at url 执行上下文错误 不能访问SVN服务器问题
  2. LeetCode()Minimum Window Substring 超时,但觉得很清晰。
  3. ORACLE OEM
  4. HCIE-Security Day14:防火墙双机热备实验(二)防火墙直路部署,上下行连接路由器
  5. java 多线程之间通信_java多线程之间的通信
  6. 六、K8s pod相关操作(2)
  7. OSPF虚链路技术原理与注意点
  8. 华三中各种路由协议的缺省优先级
  9. mysql 查询优化 ~ 善用profie利器
  10. MySQL多版本并发控制机制(MVCC)-源码浅析