Spring boot应用如何支持https

举报
汪子熙 发表于 2022/02/01 10:45:54 2022/02/01
【摘要】 首先使用命令行生成一个keystore文件: keytool -genkey -alias tomcat -keyalg RSA -keystore ./jerry.keystore保存到本地项目文件夹里:Springboot里application.properties文件,维护如下内容:server.port=5031server.ssl.key-store=jerry.keystore...

首先使用命令行生成一个keystore文件:

clipboard1,1

keytool -genkey -alias tomcat -keyalg RSA -keystore ./jerry.keystore

clipboard2,2

保存到本地项目文件夹里:

clipboard3,3

Springboot里application.properties文件,维护如下内容:

server.port=5031
server.ssl.key-store=jerry.keystore
server.ssl.key-alias=tomcat
server.ssl.enabled=true
server.ssl.key-store-password=123456
server.ssl.key-store-type=JKS

clipboard4,4

https协议就生效了:

clipboard5,5

可以看到使用的证书确实是我刚才命令行创建的:

clipboard6,6

使用下面这个API去取Hybris Commerce系统里产品主数据的明细信息:

https://<host>:9002/rest/v2/electronics/products/300938?fields=FULL
其中图片的url包含在字段images.url里,如下图所示:

clipboard1,1

加上全域名后,这个url是能够直接在浏览器里访问的:https://<host>:9002/rest/v2/medias/?context=bWFzdGVyfGltYWdlc3wxMzkzNnxpbWFnZS9qcGVnfGltYWdlcy9oMGQvaDVhLzg3OTYyMTQwOTk5OTguanBnfDIwNTM4ZDc0YjQ5YjQzNGE0ZTJlMDZlNmU2NGNmOTI4MzAwOGM1Y2UwNTkyZmJkMzczMTljN2I2N2MzZmY3N2I

只是因为我这台运行Hybris commerce的服务器证书设置有问题,因此微信里访问这个url时,报下面的错误:
该地址为IP地址,请使用域名访问网站:

clipboard2

在手机浏览器里直接输入IP地址是可以访问这张图片的:

clipboard3,3

url里的context的值:bWFzdGVyfGltYWdlc3wxMzkzNnxpbWFnZS9qcGVnfGltYWdlcy9oMGQvaDVhLzg3OTYyMTQwOTk5OTguanBnfDIwNTM4ZDc0YjQ5YjQzNGE0ZTJlMDZlNmU2NGNmOTI4MzAwOGM1Y2UwNTkyZmJkMzczMTljN2I2N2MzZmY3N2I

这个值是base64编码之后的值,使用常用的base64解码之后查看:

clipboard4,4

就是一些Hybris系统上存储图片的Administration信息。

考虑到直接返回这个url给消费端的话,由于证书问题,前端显示这个图片不太方便,故我们决定将图片的base64编码之后的内容返回给前端,而不是url.

故使用下面这段简单的代码,根据url获得图片的base64 encode编码值:

 RestTemplate template = new RestTemplate();
		 String url = "https://<host>:9002/rest/v2/medias/?context=bWFzdGVyfGltYWdlc3wxMzkzNnxpbWFnZS9qcGVnfGltYWdlcy9oMGQvaDVhLzg3OTYyMTQwOTk5OTguanBnfDIwNTM4ZDc0YjQ5YjQzNGE0ZTJlMDZlNmU2NGNmOTI4MzAwOGM1Y2UwNTkyZmJkMzczMTljN2I2N2MzZmY3N2I";
		 byte[] imageBytes = template.getForObject(url, byte[].class);
	     System.out.println("response size: " + imageBytes.length);
	     
	     String base64Image = Base64.getEncoder().encodeToString(imageBytes);
	     System.out.println("content: " + base64Image);

将生成的base64编码粘贴近在线base64解码网站,可以成功还原成图片:

clipboard5,5

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。