簡體   English   中英

在rest webservice中將url作為查詢參數發送

[英]Sending url as query parameter in rest webservice

我寫了一個休息服務來加密和解密URL。

加密代碼:

@GET
@Produces("application/json")
@Path("/encrypt/")
public Response encryptWithQuery(@QueryParam("plainString") String plainString)
        throws JSONException {
    Response response = new Response();
    AesUtil util = new AesUtil(KEY_SIZE, ITERATION_COUNT);
    response = util.encrypt(SALT, IV, PASSPHRASE, plainString);
    return response;
}

解密代碼:

@GET
@Produces("application/json")
@Path("/decryptWP/")
public Response decryptWithQuery(@QueryParam("encryptString") String encryptString)
        throws JSONException {
    Response response = new Response();
    AesUtil util = new AesUtil(KEY_SIZE, ITERATION_COUNT);
    response = util.decrypt(SALT, IV, PASSPHRASE, encryptString);
    return response;
}

當我打電話給我的加密休息服務時,我得到加密的字符串

加密網址

http://localhost:9080/kttafm/keybank/encrypt?plainString=http://localhost:9080/kttafm/master.jsp?abc=zyx

但是,當我調用解密休息服務時,我得到以下異常

javax.crypto.BadPaddingException: Given final block not properly padded

但是,如果我從@Queryparam tp @path param移動,解密工作正常,

解密方法工作正常並解密加密的字符串是

 @GET
@Produces("application/json")
@Path("/decrypt/{encryptString}")
public Response decrypt(@PathParam("encryptString") String encryptString)
        throws JSONException {
    Response response = new Response();
    AesUtil util = new AesUtil(KEY_SIZE, ITERATION_COUNT);
    response = util.decrypt(SALT, IV, PASSPHRASE, encryptString);
    return response;
} 

我錯過了什么?

請確保始終在客戶端編碼參數,例如使用URLEncoder。

例如,您的加密URL必須是

http://localhost:9080/kttafm/keybank/encrypt?plainString=http%3A%2F%2Flocalhost%3A9080%2Fkttafm%2Fmaster.jsp%3Fabc%3Dzyx

給定加密的字符串示例:“fbSjGsyDYfmJM4rAURhgdpX + XKQr8WTfiZC7PaBqK7KzfUEYau1cpXnhECqRT47n”,我可以看到有一個“+”字符,它是URL解碼的候選者。 您可以使用此URL解碼網站http://meyerweb.com/eric/tools/dencoder/來查看解碼字符串時轉換+符號。

這會導致解密錯誤,因為您的算法不會完全符合預期。

您可以通過在解密方法中添加一些調試消息來確保這一點,如下例所示:

@GET
@Produces("application/json")
@Path("/decrypt/{encryptString}")
public Response decrypt(@PathParam("encryptString") String encryptString)
        throws JSONException {
    System.out.println(encryptString);
    Response response = new Response();
    ...
} 

解決方案是在調用服務之前在客戶端執行URL編碼。 在這種情況下,您的示例將如下所示:“fbSjGsyDYfmJM4rAURhgdpX%2BXKQr8WTfiZC7PaBqK7KzfUEYau1cpXnhECqRT47n”

請注意+號的轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM