@@ -215,57 +215,44 @@ public String signRequest(String urlString, byte[] body, String contentType) {
215
215
/**
216
216
* 验证回调签名是否正确,此方法仅能验证 QBox 签名以及 GET 请求的 Qiniu 签名
217
217
*
218
- * @param originAuthorization 待验证签名字符串,以 "QBox "作为起始字符
218
+ * @param originAuthorization 待验证签名字符串,以 "QBox " 作为起始字符,GET 请求支持 "Qiniu " 开头。
219
219
* @param url 回调地址
220
220
* @param body 回调请求体。原始请求体,不要解析后再封装成新的请求体--可能导致签名不一致。
221
- * @param contentType 回调ContentType
221
+ * @param contentType 回调 ContentType
222
222
* @return
223
223
*/
224
224
@ Deprecated
225
225
public boolean isValidCallback (String originAuthorization , String url , byte [] body , String contentType ) {
226
- return isValidCallback (originAuthorization , url , "GET" , contentType , body );
227
- }
228
-
229
- /**
230
- * 验证回调签名是否正确
231
- *
232
- * @param originAuthorization 待验证签名字符串,以 "QBox "作为起始字符
233
- * @param url 回调地址
234
- * @param method 回调请求方式
235
- * @param body 回调请求体。原始请求体,不要解析后再封装成新的请求体--可能导致签名不一致。
236
- * @param contentType 回调ContentType
237
- * @return
238
- */
239
- public boolean isValidCallback (String originAuthorization , String url , String method , String contentType , byte [] body ) {
240
226
Headers header = null ;
241
227
if (!StringUtils .isNullOrEmpty (contentType )) {
242
228
header = new Headers .Builder ()
243
229
.add (HTTP_HEADER_KEY_CONTENT_TYPE , contentType )
244
230
.build ();
245
231
}
246
- return isValidCallback (originAuthorization , url , method , header , body );
232
+ return isValidCallback (originAuthorization , new Request ( url , "GET" , header , body ) );
247
233
}
248
234
249
235
/**
250
- * 验证回调签名是否正确
236
+ * 验证回调签名是否正确,此方法支持验证 QBox 和 Qiniu 签名
251
237
*
252
- * @param originAuthorization 待验证签名字符串,以 "QBox "作为起始字符
253
- * @param url 回调地址
254
- * @param method 回调请求方式
255
- * @param header 回调头,注意 Content-Type key {@link Auth#HTTP_HEADER_KEY_CONTENT_TYPE}
256
- * @param body 回调请求体。原始请求体,不要解析后再封装成新的请求体--可能导致签名不一致。
238
+ * @param originAuthorization 待验证签名字符串,以 "QBox " 或 "Qiniu " 作为起始字符
239
+ * @param callback callback 请求信息
257
240
* @return
258
241
*/
259
- public boolean isValidCallback (String originAuthorization , String url , String method , Headers header , byte [] body ) {
242
+ public boolean isValidCallback (String originAuthorization , Request callback ) {
243
+ if (callback == null ) {
244
+ return false ;
245
+ }
246
+
260
247
String authorization = "" ;
261
248
if (originAuthorization .startsWith (QINIU_AUTHORIZATION_PREFIX )) {
262
- authorization = QINIU_AUTHORIZATION_PREFIX + signQiniuAuthorization (url , method , body , header );
249
+ authorization = QINIU_AUTHORIZATION_PREFIX + signQiniuAuthorization (callback . url , callback . method , callback . body , callback . header );
263
250
} else if (originAuthorization .startsWith (QBOX_AUTHORIZATION_PREFIX )) {
264
251
String contentType = null ;
265
- if (header != null ) {
266
- contentType = header .get (HTTP_HEADER_KEY_CONTENT_TYPE );
252
+ if (callback . header != null ) {
253
+ contentType = callback . header .get (HTTP_HEADER_KEY_CONTENT_TYPE );
267
254
}
268
- authorization = QBOX_AUTHORIZATION_PREFIX + signRequest (url , body , contentType );
255
+ authorization = QBOX_AUTHORIZATION_PREFIX + signRequest (callback . url , callback . body , contentType );
269
256
}
270
257
return authorization .equals (originAuthorization );
271
258
}
@@ -573,4 +560,24 @@ public int compareTo(Header o) {
573
560
}
574
561
}
575
562
}
563
+
564
+ public static class Request {
565
+ private final String url ;
566
+ private final String method ;
567
+ private final Headers header ;
568
+ private final byte [] body ;
569
+
570
+ /**
571
+ * @param url 回调地址
572
+ * @param method 回调请求方式
573
+ * @param header 回调头,注意 Content-Type Key 字段需为:{@link Auth#HTTP_HEADER_KEY_CONTENT_TYPE},大小写敏感
574
+ * @param body 回调请求体。原始请求体,不要解析后再封装成新的请求体--可能导致签名不一致。
575
+ **/
576
+ public Request (String url , String method , Headers header , byte [] body ) {
577
+ this .url = url ;
578
+ this .method = method ;
579
+ this .header = header ;
580
+ this .body = body ;
581
+ }
582
+ }
576
583
}
0 commit comments