1414import org .apache .commons .lang .StringUtils ;
1515
1616import java .io .IOException ;
17+ import java .io .UnsupportedEncodingException ;
18+ import java .net .URLEncoder ;
1719import java .util .*;
1820
1921public class SignRequestInterceptor implements RequestInterceptor {
@@ -28,7 +30,7 @@ public String name() {
2830 @ Override
2931 public InterceptorContext intercept (InterceptorContext context ) throws ApiException {
3032 String path = context .getRequestContext ().getPath ();
31- String method = context .getRequestContext ().getMethod ();
33+ String method = context .getRequestContext ().getMethod ();
3234 Map <String , String > headerParams = context .getRequestContext ().getHeaderParams ();
3335 List <Pair > queryParams = context .getRequestContext ().getQueryParams ();
3436 ServiceInfo serviceInfo = context .getRequestContext ().getServiceInfo ();
@@ -75,8 +77,7 @@ public InterceptorContext intercept(InterceptorContext context) throws ApiExcept
7577 String host = context .getRequestContext ().getHost ();
7678 try {
7779 Map <String , String > presignedParams = volcengineSign .presign (queryParamsMap , host );
78- String presignedUrl = buildPresignedUrl (
79- context .getRequestContext ().getSchema (), host , presignedParams );
80+ String presignedUrl = buildPresignedUrl (context .getRequestContext ().getSchema (), host , presignedParams );
8081 context .getRequestContext ().setPresignedUrl (presignedUrl );
8182 } catch (Exception e ) {
8283 throw new ApiException (e );
@@ -125,15 +126,23 @@ public InterceptorContext intercept(InterceptorContext context) throws ApiExcept
125126
126127 private static String buildPresignedUrl (String scheme , String host , Map <String , String > presignedParams ) {
127128 StringBuilder url = new StringBuilder ();
128- url .append (scheme ).append ("://" ).append (host ).append ("?" );
129+ if (StringUtils .isNotEmpty (scheme ) && StringUtils .isNotEmpty (host )) {
130+ url .append (scheme ).append ("://" ).append (host ).append ("?" );
131+ }
129132
130133 List <String > keys = new ArrayList <>(presignedParams .keySet ());
131134 Collections .sort (keys );
132135
133136 for (int i = 0 ; i < keys .size (); i ++) {
134137 String key = keys .get (i );
135138 String value = presignedParams .get (key );
136- url .append (key ).append ("=" ).append (value );
139+ try {
140+ url .append (key )
141+ .append ("=" )
142+ .append (URLEncoder .encode (value , "UTF-8" ).replace ("+" , "%20" ));
143+ } catch (UnsupportedEncodingException e ) {
144+ url .append (key ).append ("=" ).append (value );
145+ }
137146 if (i < keys .size () - 1 ) {
138147 url .append ("&" );
139148 }
0 commit comments