WireMock 中请求头匹配与响应配置的一些实践
记录用 WireMock 挡服务时,通过 JSON 映射文件和 Java API 做请求头匹配、响应头与响应体配置的两种方式及细节。
支持通配符SSL证书、多域名证书、IP证书。适配ACME接口, 支持Zerossl、Let's Encrypt和Google等渠道。登录已有账号
2026-07-07 16:15:43 MinIO Java 预签名URL
对象存储里,要想临时给别人一个文件访问链接,又不希望直接把访问密钥发出去,预签名URL就是个很常用的手段。MinIO Java SDK 提供了 getPresignedObjectUrl 方法,可以生成带时效签名的 URL,客户端在有效期内就能直接操作私有桶里的对象。
基本用法不复杂。先初始化一个 MinioClient,配好 endpoint 和 access key / secret key。然后调用 getPresignedObjectUrl,通过 builder 把参数传进去。需要的东西有这几个:bucket 名称、对象路径(比如 folder/image.jpg)、操作类型,以及有效期。
操作类型用 Method.GET 就是生成下载链接,Method.PUT 就是上传链接。有效期可以传一个整数加 TimeUnit,比如 1 小时就是 expiry(1, TimeUnit.HOURS)。
一个完整的下载链接示例大概这样:
MinioClient minioClient = MinioClient.builder()
.endpoint("http://192.168.202.1:9000")
.credentials("minioadmin", "minioadmin")
.build();
String url = minioClient.getPresignedObjectUrl(
GetPresignedObjectUrlArgs.builder()
.bucket("my-bucket")
.object("test/file.txt")
.method(Method.GET)
.expiry(1, TimeUnit.HOURS)
.build()
);
System.out.println("预签名URL: " + url);
异常那一块也别漏了,需要捕获 InvalidKeyException、NoSuchAlgorithmException 等,实际写的时候可以兜底 catch Exception 统一处理,示例里就是那么干的。
如果是要生成上传用的预签名 URL,把 method 改成 Method.PUT 就行,其他几乎一样:
String uploadUrl = minioClient.getPresignedObjectUrl(
GetPresignedObjectUrlArgs.builder()
.bucket("my-bucket")
.object("uploads/file.txt")
.method(Method.PUT)
.expiry(10, TimeUnit.MINUTES)
.build()
);
这里有几个经验。有效期别随手设太长,一般几分钟到一两个小时足够。长期有效的 URL 放出去就是安全隐患,就算签名能防篡改,但一旦泄露在有效期内别人也能随便用。
时效设置可以用 TimeUnit,灵活度还行。我一般下载链接给 30 分钟,上传可能给 10 分钟,具体看业务能接受多久的等待。
权限方面,生成 PUT 预签名 URL 不代表客户端就能直接上传成功,MinIO 的桶策略默认可能不允许匿名上传,即使签了名也可能被拒。要么调整桶的访问策略,允许 PutObject;要么干脆把桶设成公开写,但那样就没必要用预签名了。通常的做法是单独给这个桶配上允许 PutObject 的 policy,然后靠预签名控制有效期和对象路径。
SDK 版本尽量用新的,至少 8.5.9 以上,老版本有些坑和 bug。Maven 依赖这样加:
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.5.9</version>
</dependency>
线上如果遇到生成的 URL 访问不了,排查顺序一般是:先用 bucketExists 确认桶在不在,再看看对象路径是不是多了或者少了斜杠,最后可以试试把有效期调短重新生成。极少数情况下签名算法会因为客户端时间不同步出问题,不过那种情况报错会比较明显。
有时候刚入门会以为预签名 URL 能绕过所有权限检查,其实它只是把签名动作前置了,底层鉴权逻辑没变。比如桶不存在的错误跟有没有签名无关,直接报 404。
这点搞明白能少走点弯路。
这样整下来,SDK 生成预签名 URL 的代码量不大,基本就是构建参数、调方法、拿结果,剩下的都是周边注意事项。总之能用就行。
记录用 WireMock 挡服务时,通过 JSON 映射文件和 Java API 做请求头匹配、响应头与响应体配置的两种方式及细节。
记录在 Aspose.PDF 里加载本地 TTF 字体,以及绕过 TTC 格式不支持问题的两种可行方案。
记录一次排序 NPE 的排查和解决,顺便说下 IDEA 调试集合时 null 元素不显示的问题怎么调整。
记录 datetime 字段定义、插入、格式化查询以及 Java 端类型映射、时区等问题,避免线上踩坑。
本文手把手教你在Linux系统上安装MinIO对象存储服务,并详细指导如何配置SSL证书以实现安全的HTTPS访问。