2013-06-21 61 views
0

我是java新手,我正在嘗試編寫一個實用程序api來加密/解密字符串。我有我的控制器和請求映射工作,並且我有加密/解密方法工作。在Java Web API中使用編碼進行Url路由

我遇到的問題是解密包含正斜槓('/')的字符串。如果我將它在網址中未編碼(例如http://localhost:8080/api/package/util/decrypt/oJfTtchpM9WC/4Oqpu7FZQ==),則URL路由會中斷(這顯然是爲什麼)。

如果我URL編碼它(如http://localhost:8080/api/package/util/decrypt/oJfTtchpM9WC%2F4Oqpu7FZQ==)然後在路徑變量中的值是空的。

另請注意,http://localhost:8080/api/package/util/decrypt/oJfTtchpM9WC(無斜線)工作正常。

似乎每當我在路徑變量中放入一個'%',我就會得到一個空白頁面作爲迴應。不打方法。不拋出異常(我能找到 - 再次,我還是學習環境)

我已經簡化我的解密方法,只輸出路徑變量稱爲data

@RequestMapping(value = "/util/decrypt/{data}", method = RequestMethod.GET) 
@ResponseBody 
public String decrypt(HttpServletResponse httpResponse, 
     @PathVariable String data) throws Exception 
{ 
    return data; 
    // return URLDecoder.decode(data, "UTF-8"); 
} 

燦任何人都向我解釋發生了什麼,以及我如何才能做到這一點?

非常感謝!

+0

是參數數據null? – shazinltc

+0

它甚至沒有出現在控制器中的解密方法。 – earthling

+1

您是否嘗試傳遞它作爲一個正常的請求參數即?data = yourEncryptedString – shazinltc

回答

0

我更新了我的加密方法,使用函數encodeBase64URLSafeString(而不僅僅是encodeBase64String),並將其更改爲傳遞數據作爲標準請求參數(即?data = string)。這消除了這個問題。

使用base64算法的URL安全變體對二進制數據進行編碼 但不包含輸出。網址安全的變體會發出 - 而不是+和/字符。注意:不添加填充。