问题现象:
java sdk设置url签名过期时间很长不生效
原因及解决方法:
java sdk获取url签名链接需要调用generatePresignedUrl函数,函数中需要设置expiration超时时间参数。
例如:一个小时设置为 3600* 1000。但是如果要设置100年,设置不生效,原因是默认这里是int型,100年算法约是3600* 1000*24*365*100已经超出int型可以计算范围。转换为long型即可,expiration参数设置为3600l* 1000*24*365*100就可以了。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在使用Java SDK生成OSS签名URL时,若遇到设置很长的过期时间(例如100年)不生效的问题,其原因在于generatePresignedUrl
函数内部对过期时间参数expiration
的处理。具体分析及解决方法如下:
问题现象: 用户尝试通过Java SDK设置OSS签名URL的过期时间为100年,但发现设置不生效。
原因分析:
3600 * 1000 * 24 * 365 * 100
,这个数值超出了int类型所能表示的最大范围(约21亿),因此导致设置失效。解决方法:
L
或l
来显式声明这是一个long型数值。例如,正确的设置方式应为:Date expiration = new Date(new Date().getTime() + 3600L * 1000L * 24 * 365 * 100);
这样即可确保过期时间参数正确无误地设置为100年,并避免了整型溢出的问题。通过上述调整,您可以成功生成具有长期有效性的OSS签名URL,满足特定场景下的需求。请确保在实际应用中采用此修正后的代码实践以解决过期时间设置不生效的问题。