如何在SpringBoot内嵌的Tomcat中配置HTTPS

注意:在实际的项目开发中,一般都会在nginx中配置https,不会在Tomcat中进行配置

步骤1:利用jdk自带的keytool工具生成https证书

keytool -genkey -alias myhttps -keyalg RSA -keysize 2048 -keystore wen_key.p12 -validity 365

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SdncbKhE-1611023097847)(C:\Users\23746\AppData\Roaming\Typora\typora-user-images\image-20210118164326823.png)]

最后会在当前目录下生成一个密钥文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K64KH31R-1611023097850)(C:\Users\23746\AppData\Roaming\Typora\typora-user-images\image-20210118164428161.png)]

将该文件拷贝到SpringBoot项目的resources目录下,并在application.properties配置文件中配置如下ssl信息

server.ssl.key-alias=myhttps
server.ssl.key-store=classpath:wen_key.p12
server.ssl.key-store-password=123456

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MWbgp7WT-1611023097853)(C:\Users\23746\AppData\Roaming\Typora\typora-user-images\image-20210118165336581.png)]

再使用http请求访问接口时就会报如下错误

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rslgnVen-1611023097855)(C:\Users\23746\AppData\Roaming\Typora\typora-user-images\image-20210118165438442.png)]

只能使用https请求访问接口,如果想支持http请求,比如当客户端使用http协议的8081端口访问接口,服务器接收到请求之后自动转发到https的8080端口,可以进行如下配置

//这里面的配置代码都是一些程式化的,按照下面的配置就可以支持http请求
@Configuration
public class TomcatConfig {

    @Bean
    TomcatServletWebServerFactory tomcatServletWebServerFactory(){
        TomcatServletWebServerFactory tomcatServletWebServerFactory = new TomcatServletWebServerFactory(){
            @Override
            protected void postProcessContext(Context context) {
                SecurityConstraint securityConstraint = new SecurityConstraint();
                securityConstraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection securityCollection = new SecurityCollection();
                securityCollection.addPattern("/*");
                securityConstraint.addCollection(securityCollection);
                context.addConstraint(securityConstraint);
            }
        };
        tomcatServletWebServerFactory.addAdditionalTomcatConnectors(myConnector());
        return tomcatServletWebServerFactory;
    }

//    下面配置:当使用http协议的8081端口请求数据会转发到8080端口
    private Connector myConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(8081);
        connector.setSecure(false);
        connector.setRedirectPort(8080);
        return connector;
    }
}

再启动SpringBoot程序时可以在控制台看到内嵌的Tomcat已经开启了2个端口,http的8081端口和https的8080端口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pWynzVEC-1611023097857)(C:\Users\23746\AppData\Roaming\Typora\typora-user-images\image-20210118171151702.png)]

写一个测试接口

@RestController
public class HelloController {

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

在浏览器中输入http://localhost:8081/hello则会自动跳转到https://localhost:8080/hello,当然也可以直接访问https://localhost:8080/hello
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值