http访问不安全,使用https相对好些。

参考网址:https://blog.csdn.net/bock1984/article/details/90116965

操作如下:

  • 1. 使用JDK自带keytool工具,创建本地SSL证书

 启动命令行工具,进入jdk的bin目录执行以下命令:
       

keytool -genkey -v -alias tomcat -keyalg RSA -keystore F:\tomcat.keystore -validity 36500

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

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

.-validity 证书的有效期

  • 2.将生成的tomcat.keystore文件拷贝到springboot项目根目录下:

  • 3.修改application.properties文件

·

 看application.properties配置文件可知,后面只能用https协议访问了。

1) http访问自动转https

(用户前期用http协议,突然改成只用https访问,这样有的客户还用http访问时就访问不到服务器了,针对这种情况可做http访问自动转到https)

光有HTTPS肯定还不够,很多用户可能并不知道,用户有可能继续使用HTTP来访问你的网站,这个时候我们需要添加HTTP自动转向HTTPS的功能,当用户使用HTTP来进行访问的时候自动转为HTTPS的方式。
(这个是springboot2.x的配置,sprintboot1.x有些不一样 区别就是1.0用 EmbeddedServletContainerFactory ,,,2.0用 TomcatServletWebServerFactory)
(另也可以不用新建这个配置类,而是在入口类中添加下面这两个Bean就行了)
package com.nsoft.gkzp.syscore.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.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource; /**
* 监听http端口,如访问网址为http协议的,自动转换为Https
*/
@Configuration
@PropertySource(value="classpath:application.properties")
public class HttpsComponent { //读取application.properties配置文件配置的https访问端口号
@Value("${server.port}")
public int SYSTEM_HTTPS_PORT;
//读取application.properties配置文件配置的http监控端口(自动转换为https)
@Value("${server.http.port}")
public int SYSTEM_HTTP_PORT; @Bean
public Connector connector(){ Connector connector=new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(SYSTEM_HTTP_PORT);//Connector监听的http的端口号
connector.setSecure(false);
connector.setRedirectPort(SYSTEM_HTTPS_PORT);//监听到http的端口号后转向到的https的端口号(一般会用443端口)
return connector;
} @Bean
public TomcatServletWebServerFactory tomcatServletWebServerFactory(){ TomcatServletWebServerFactory tomcat =new TomcatServletWebServerFactory(){
@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);
}
};
tomcat.addAdditionalTomcatConnectors(connector());
return tomcat;
}
}
package com.nsoft.gkzp.syscore.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; /**
* 监听http端口,如访问网址为http协议的,自动转换为Https
*/
@Configuration
public class HttpsComponent { @Bean
public Connector connector(){ Connector connector=new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(8082);//Connector监听的http的端口号
connector.setSecure(false);
connector.setRedirectPort(8443);//监听到http的端口号后转向到的https的端口号(一般会用443端口)
return connector;
} @Bean
public TomcatServletWebServerFactory tomcatServletWebServerFactory(){ TomcatServletWebServerFactory tomcat =new TomcatServletWebServerFactory(){
@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);
}
};
tomcat.addAdditionalTomcatConnectors(connector());
return tomcat;
}
}

直接写端口号,理解更直观些

另:

这边自己生成的证书,是不被公网认证的。如下图。要想公网认证,需要去网上相关机构的去买(将域名提供给他们,他们生成公网可认证的证书),便宜点的大约一年一千多块钱吧。

2) 同时支持http和https访问

(参考 : https://blog.csdn.net/qq_38288606/article/details/89478353

 注意:Spring Boot不支持通过application.properties同时配置HTTP连接器和HTTPS连接器

故我在application.properties配置了https相关配置,然后添加了一个自定义的server.http.port参数,然后新建httpComponent.java配置java类,来启动http端口访问

application.properties

新建类D:\workspace-gzy-gkzp\src\main\java\com\nsoft\gkzp\syscore\config\httpComponent.java

package com.nsoft.gkzp.syscore.config;

import org.apache.catalina.connector.Connector;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource; /**
* 监听http端口,使http访问端口生效
*/
@Configuration
@PropertySource(value="classpath:application.properties")
public class httpComponent { //读取application.properties配置文件配置的http监控端口
@Value("${server.http.port}")
public int SYSTEM_HTTP_PORT; @Bean
public ServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
tomcat.addAdditionalTomcatConnectors(createStandardConnector()); // 添加http
return tomcat;
} private Connector createStandardConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setPort(SYSTEM_HTTP_PORT);
return connector;
} }

至此,就可以用  https://localhost   和 http://localhost:8082 访问了。这是spring2.x的配法。

 

注意: 上面在application.properties配置文件中配置访问端口号,是因为工程用了内置的tomcat容器(如下图pom.xml引入的tomcat依赖)。如果是用外部的tomcat,则直接在tomcat的\conf\server.xml配置文件里配置相关参数。

参考文章:

springboot+https+http的更多相关文章

  1. springboot https证书配置

    如果公司有提供证书如: 拿到证书秘钥可直接在springboot 的配置文件中配置: server.ssl.key-store=classpath:cert.pfx server.ssl.key-st ...

  2. https证书制作及springboot配置https

    1.生成秘钥 openssl genrsa -out private.key 2048 2.生成用于申请请求的证书文件csr,一般会将该文件发送给CA机构进行认证,本例使用自签名证书 openssl ...

  3. springBoot+springSecurity 数据库动态管理用户、角色、权限

    使用spring Security3的四种方法概述 那么在Spring Security3的使用中,有4种方法: 一种是全部利用配置文件,将用户.权限.资源(url)硬编码在xml文件中,已经实现过, ...

  4. SpringBoot开发案例之打造私有云网盘

    前言 最近在做工作流的事情,正好有个需求,要添加一个附件上传的功能,曾找过不少上传插件,都不是特别满意.无意中发现一个很好用的开源web文件管理器插件 elfinder,功能比较完善,社区也很活跃,还 ...

  5. springCloud、springBoot学习

    http://projects.spring.io/spring-cloud/  官网https://springcloud.cc/spring-cloud-netflix.htmlhttp://cl ...

  6. SpringBoot 使用Mybatis-Plus

    简介 Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发.提高效率而生. 特性 无侵入:Mybatis-Plus 在 My ...

  7. springboot 有用网址收集

    http://www.ityouknow.com/spring-boot.html springboot多数据源配置: https://blog.csdn.net/neosmith/article/d ...

  8. redis 安装使用 & SpringBoot Redis配置

    1.安装 https://www.cnblogs.com/dingguofeng/p/8709476.html https://www.runoob.com/redis/redis-keys.html ...

  9. java客户端验证https连接(忽略证书验证和证书验证两种方式)

    首先根据如下操作生成证书,配置springboot https,生成一个简单的https web服务 https://www.cnblogs.com/qq931399960/p/11889349.ht ...

随机推荐

  1. py 包和模块,软件开发目录规范

    目录 py 包和模块,软件开发目录规范 什么是包? 什么是模块? 软件开发目录规范 py 包和模块,软件开发目录规范 什么是包? 包指的是内部包__init__.py的文件夹 包的作用: 存放模块,包 ...

  2. debian/ubuntu安装mssql

    添加源: debian源:deb [arch=amd64] https://packages.microsoft.com/debian/10/prod buster main ubuntu源:deb ...

  3. 【转】Web实现前后端分离,前后端解耦

    一.前言 ”前后端分离“已经成为互联网项目开发的业界标杆,通过Tomcat+Ngnix(也可以中间有个Node.js),有效地进行解耦.并且前后端分离会为以后的大型分布式架构.弹性计算架构.微服务架构 ...

  4. springboot修改页面不用重启的设置(idea)

       1) “File” -> “Settings” -> “Build,Execution,Deplyment” -> “Compiler”,选中打勾 “Build project ...

  5. Java集合详解8:Java集合类细节精讲,细节决定成败

    <Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...

  6. DDD框架基础知识

    DDD框架基础知识 参考: https://www.cnblogs.com/zhili/p/OnlineStorewithDDD.html(领域驱动设计,分层架构) https://www.cnblo ...

  7. TP5多字段排序

    有业务需求如下: select * from table where id IN (3,6,9,1,2,5,8,7) order by field(id,3,6,9,1,2,5,8,7); 这里直入主 ...

  8. DDR3(5):读写仲裁

    上一讲我们完成了读的控制,但是并不知道是否设计成功,必须读写结合才行.DDR3 的 app 端的命令总线是读写复用的,因此可能会存在读写冲突的时刻,为了解决此问题,必须进行分时读写,也就是我们说的仲裁 ...

  9. Channel延续篇

    上篇文章中介绍了NIO中的Channel,从Channel是什么.特性.分类几个方面做了下简单的介绍.但是后面Channel的分类,个人感觉不够全面,容易误导读者,特此以这篇文章加以补充. Chann ...

  10. 关于暗网需要关闭JS的处理

    最近电视剧导致暗网热度很大,执法力度也大了很多,大部分暗网聚集地都不允许开JS权限访问(原因大家都懂,防止钓鱼执法)​ 因为是英文版而且是火狐,所以简单记录下,以防小白蛋疼 再打开就可以了 Tor协议 ...