ITPub博客

首页 > 数据库 > 数据库开发技术 > 项目特殊需求丨Springboot中如何使用https协议?!

项目特殊需求丨Springboot中如何使用https协议?!

原创 数据库开发技术 作者:Finally_m 时间:2022-08-26 08:03:00 0 删除 编辑
点击上方蓝字关注我们

最近九哥的一个学生在做项目时碰到了一个特殊的需求,前端浏览器需要存放跨域请求的cookie,需要将cookie的secure属性设置为true。

这样一来,就要求后端的接口必须以HTTPS协议提供访问,那么我们该如何在Springboot中使用Https协议呢?是否一定要花钱购买数字证书才可以呢?

其实如果我们只是在开发和测试阶段,完全可以自定义数字证书,并且通过简单的配置即可让Springboot程序切换为Https协议,接下来九哥就带各位在SpringBoot中实现该功能。

一. 创建自定义数字证书

首先我们得创建一个自定义的数字证书,其实在JDK中就提供了现成的工具用于生成数字证书,我们只需打开命令行工具,执行如下代码即可生成一个数字证书。

keytool -genkeypair -alias springboot-https -keypass 123456 
-keyalg RSA -keysize 2048 -validity 365     
-keystore d:/cert/springboot.keystore 
-storepass 123456

执行结果如下图所示:

这里会出现一个警告,我们按照提示更改一下证书密钥库的格式即可。

keytool -importkeystore -srckeystore d:/cert/springboot.keystore 
-destkeystore d:/cert/springboot.keystore
-deststoretype pkcs12

这样我们就将密钥库格式转换为pkcs12格式了,此时得到的密钥库文件如下图所示,其中springboot.keystore就是我们所需要的密钥库文件。

二. 配置Springboot

1. 导入数字证书

接着我们要将生成的密钥库文件,放入到Springboot工程中的resources目录下,如下图所示:

2. 创建yml配置文件

然后添加如下格式的yml配置信息。

server:
  ssl:
    #开启https
    enabled: true
    #指定存放证书的密钥库文件的位置
    key-store: classpath:springboot.keystore
    #密钥库文件的格式
    key-store-type: PKCS12
    #别名,需要与创建密钥库时的别名一致
    key-alias: springboot-https
    key-password: 123456
    key-store-password: 123456

3. 创建Java测试类

这里我们可以写一个Java测试类。

@SpringBootApplication
@RestController
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @RequestMapping("/")
    public String hello() {
        return "hello";
    }
}

4. 测试访问

接下来我们启动程序,并通过默认的8080端口进行访问。

此时我们会发现,当使用http协议访问时,会看到上图所示的错误提示信息,接着我们换成https协议访问。

这里由于数字证书是我们自己生成的,没有CA给我们认证,因此浏览器给出了安全提示,我们只需点击高级按钮,继续前往即可。

我们发现,最终接口就访问成功了。

三. 同时支持http协议和https协议

但在有的项目中,会要求我们同时支持http和https协议,这该怎么实现呢?我们继续往下看。

配置http端口

首先我们在yml配置文件中,添加http端口号定义。

http:
  port: 8888

1. 创建配置类

接着我们在Java配置类中,向IOC容器中添加如下Bean。

http:
  port: 8888

2. 启动测试

启动项目时,我们会发现如下日志,Tomcat绑定了两个端口号,其中https绑定在8080,http绑定在8888。

以Http协议访问会如下图所示,我们发现可以正常访问到接口。

再以Https协议访问会如下图所示,也可以正常访问到接口。

这样我们就实现了一个项目中同时支持http和https协议,现在你是不是学会了呢?如果你还有什么别的疑问,可以在评论区留言哦。关注Java架构栈,每天干货都不断!

本月福利,关注公众号回复【福利】抢书咯!

今日份干货,学会的同学回复“666”!

精选第一名,可以领取办公鼠标垫一个!

点击【阅读原文】,零基础免费学Java!


原文作者:Java架构栈;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2021-04-13

  • 博文量
    573
  • 访问量
    243903