在spring中配置项目运行的端口很简单。

在application.properties中

server.port: 

这样配置后,spring boot内嵌的tomcat服务器就是跑在8080端口启动http服务。但是如果在配置中启动https服务,用到的端口也是server.port。spring 不支持同时在配置中启动http和https。
但是如果这样配置,项目只能走http协议。如果想让项目支持https协议,可以有两种方法。
一:在配置中配置https的配置信息,http采用硬编码的方式
二:用硬编码的方式来写https
用硬编码的方式写https有点麻烦,所以一般都采用第一种方式。
无论用哪种方式,想支持https,一定要生成一对秘钥。用openssl生成证书:

openssl genrsa -out server.key 2048   //生成服务器端私钥

openssl req -new -key server.key -out server.csr   //生成服务端证书请求文件 注意生成过程中需要你输入一些服务端信息
openssl x509 -req -sha256 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days  -out server.crt //使用CA证书生成服务端证书  关于sha256,默认使用的是sha1,在新版本的chrome中会被认为是不安全的,因为使用了过时的加密算法。
openssl pkcs12 -export -in server.crt -inkey server.key -out server.pkcs12  //打包服务端的资料为pkcs12格式(非必要,只是换一种格式存储上一步生成的证书)
生成过程中,需要创建访问密码,请记录下来。
keytool -importkeystore -srckeystore server.pkcs12 -destkeystore server.jks -srcstoretype pkcs12 //生成服务端的keystore(.jks文件, 非必要,Java程序通常使用该格式的证书)
生成过程中,需要创建访问密码,请记录下来。 把ca证书放到keystore中(非必要) 
keytool -importcert -keystore server.jks -file ca.crt

生成证书后,让浏览器信任跟证书(ca.crt)。
打开浏览器的设置。找到设置信任证书的部分。导入证书。
准备工作完毕,看一下代码
application.properties

server.port: 8092
server.ssl.key-store=/home/fzk/key/server.jks
server.ssl.key-store-password=123456 //这个是在生成证书的时候设置的密码
fzk.port:8091
fzk.port:8091是自定义的名。因为不可能同时出现两个server.port

同时支持http还需要一个java类
HttpsConfiguration.java (名字自己随便起)

import org.apache.catalina.connector.Connector;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; @Configuration
public class HttpsConfiguration {
@Value("${fzk.port}")
private int port; @Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
tomcat.addAdditionalTomcatConnectors(createHttpConnector());
return tomcat;
} private Connector createHttpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(port);
connector.setSecure(false);
return connector;
}
}

@Configuration是spring的注解,表示这是一个配置。@Value("${fzk.port}")找到配置文件中的fzk.port赋值给int类型的port。还可以写成下面这样:

@Configuration(prefix = "fzk")
public class HttpsConfiguration {
private int port;
public void setPort(int port){
this.port = port;
}
public int getPort(){
return port;
}
}

此时类中的属性名和配置文件中的名一定要对应上。

这样就可以让项目同时支持http和https了。

上面说了还有另外一种方法,采用硬编码https的请求的方式。

配置文件中可以不用写服务端口号,直接看java类

@Configuration
public class HttpsConfiguration {
@Bean
public EmbeddedServletContainerCustomizer containerCustomizer() {
return new EmbeddedServletContainerCustomizer() {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
Ssl ssl = new Ssl();
// Server.jks中包含服务器私钥和证书
ssl.setKeyStore("/home/fzk/key/server.jks");
ssl.setKeyStorePassword("123456");
container.setSsl(ssl);
container.setPort(8092);
}
};
} @Bean
public EmbeddedServletContainerFactory servletContainerFactory() {
TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
factory.addAdditionalTomcatConnectors(createHttpConnector());
return factory;
} private Connector createHttpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setSecure(false);
connector.setPort(8093);
connector.setRedirectPort(8092);
return connector;
}
}

第一个bean的部分是使端口8092的https可以访问。下面的部分是让端口8093的http重定向到8092。

基于SpringBoot项目的https的更多相关文章

  1. springboot 项目的https的发布

    1.生成密钥证书 生成命令: keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize -keystore keysto ...

  2. spring-boot项目的docker集成化部署(一)

    目录 spring-boot项目的docker集成化部署 前言 基本思路与方案 基本步骤 准备源码 服务器和基础环境 结语 1. 本文总结: 2. 后期优化: spring-boot项目的docker ...

  3. 关于springboot项目的jar和war两种打包方式部署的区别

    关于springboot项目的jar和war两种打包方式部署的区别 关于springboot项目的jar和war两种打包方式部署的区别? https://bbs.csdn.net/topics/392 ...

  4. springboot项目的maven的pom.xml文件第一行报错 Unknown Error

    springboot项目的maven的pom.xml文件第一行报错 Unknown Error https://blog.csdn.net/mini_jike/article/details/9239 ...

  5. SpringBoot项目的parent依赖和配置文件*.properties、*.yml详解

    1.idea创建SpringBoot项目 idea创建SpringBoot项目应该对很多人来说已经是菜到不能到菜的操作了,但是对于初学者小白来说,还是要讲解一下的.打开idea,然后选择Spring ...

  6. 如何获取SpringBoot项目的applicationContext对象

    ApplicationContext对象是Spring开源框架的上下文对象实例,在项目运行时自动装载Handler内的所有信息到内存.传统的获取方式有很多种,不过随着Spring版本的不断迭代,官方也 ...

  7. webrtc笔记(1): 基于coturn项目的stun/turn服务器搭建

    webrtc是google推出的基于浏览器的实时语音-视频通讯架构.其典型的应用场景为:浏览器之间端到端(p2p)实时视频对话,但由于网络环境的复杂性(比如:路由器/交换机/防火墙等),浏览器与浏览器 ...

  8. 基于Python项目的Redis缓存消耗内存数据简单分析(附详细操作步骤)

    目录 1 准备工作 2 具体实施   1 准备工作 什么是Redis? Redis:一个高性能的key-value数据库.支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使 ...

  9. 构建Springboot项目的3种方式

    一.自己创建: 1.创建maven项目 2.pom.xml添加如下内容: <!--1.指定依赖都由springboot管理--> <parent> <groupId> ...

随机推荐

  1. Android中@id与@+id区别

    Android中的组件需要用一个int类型的值来表示,这个值也就是组件标签中的id属性值. id属性只能接受资源类型的值,也就是必须以@开头的值,例如,@id/abc.@+id/xyz等. 如果在@后 ...

  2. linux下如何安装配置redis及主从配置

    redis的优点:支持主从备份,操作指令丰富,支持异步的数据持久化 将 redis 安装到 /usr/local/webserver/redis 1.下载安装包 wget http://redis.g ...

  3. html与表格知识

    <html>    --开始标签 <head> 网页上的控制信息 <title>页面标题</title> </head> <body& ...

  4. 解决Bootstrap 附加导航(Affix)的问题和使用时若干注意事项

    1.要清楚Affix分别赋予的class, 开始:affix-top 达到top参数:affix 达到bottom参数:affix-bottom 2.一定要自定义这些class,否则 插件会默认给你在 ...

  5. VC 实现文件与应用程序关联(转载)

    转载:http://www.cnblogs.com/RascallySnake/archive/2013/03/01/2939102.html 日常工作中,doc文件直接双击后,就能启动word软件, ...

  6. VirtualBox下Ubuntu利用桥接方式上网

    1.打开virtualbox,选择[设置]-[网络]将连接方式改为[Bridged Adapter] 2.在Ubuntu中, 运行sudo gedit /etc/network/interfaces ...

  7. SqlSever基础 over与avg配合,将平均值添加到原表的右侧,并为新列起名

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  8. 精通正则表达式(第三版)——Mastering Regular Expressions,3rd Edition——读书笔记1

    基础知识介绍: 子表达式匹配 环视 引号内的字符串:"(^")*" 12小时制:(1[0123]|[1-9]):[0-5][0-9]*(am|pm) 24小时制:(([0 ...

  9. How much do we need to learn to be a Self-driving Car Engineer?

    Before everything we need programming skills in C++ and Python. One of the suggested book for C++ le ...

  10. Android中的五大布局和logcat打印日志

    在android中的布局有五大类,有的时候你可能用到一种,但有的时候你也可能需要两种或者三种布局同时一起使用.这五种布局为别为:LinearLayout(线性布局),FrameLayout(框架布局) ...