從URL

2012-09-26 35 views
1

Retreiveing編碼值我在傳遞一個URL編碼SSO令牌...這樣的URL看起來像從URL

http://127.0.0.1:7101/CRMOD_UCM-Sankalp-context-root/BrowseFile.jsp?token=%246%24zhxjx%2fpz6dVucl9cgG43ii2Tr4qVnNbeqJg8jCy6Jj7vRvXN4%3d%3b%246%24GlRGp%2fxfEM308NZGmY%2fhjHav2yjHSvbww1l0%2fCcCtcVjzl%2bCQFlQPdBRKO0t1XUmF0I6xLmfQ%2fnb7VgJeSYnvrAb9YUQQ3tvr%2fBZ%2bIRZiBAGU2%2fZg%3d 

但是當我retreive變量的值,並使用通過out.println 打印(」 SSO令牌:「+ request.getParameter(」token「)); 它打印

$ 6 $ zhxjx/pz6dVucl9cgG43ii2Tr4qVnNbeqJg8jCy6Jj7vRvXN4 =; $ 6 $ GlRGp/xfEM308NZGmY/hjHav2yjHSvbww1l0/CcCtcVjzl + CQFlQPdBRKO0t1XUmF0I6xLmfQ/nb7VgJeSYnvrAb9YUQQ3tvr/BZ + IRZiBAGU2/ZG =

正確令牌是其存在於該URL,WHY我在我的打印變得如此不同的價值...

請幫助......

回答

1

如果您想要解碼,則使用以下代碼即可獲取編碼值。默認情況下,系統解碼爲我們,但在你的情況下,它沒有解碼,你必須顯式解碼request.getParameter(「token」)的值。

String token = request.getParameter("token").toString(); 
// To decode url 
String decodedtoken = URLDecoder.decode(token , "UTF-8"); 
System.out.println("Decoded token value "+ decodedtoken); 

// To encode url 
String encodedtoken = URLEncoder.encode(token , "UTF-8"); 
System.out.println("Encoded token value "+ encodedtoken); 
3

request.getParameter("token")參數值進行解碼,從而使被印刷的值是參數值在解碼版本網址。

請參閱Java EE, accent in url, request.getParameter wrong value瞭解更多信息。

+0

那麼這是一個很大的安全威脅與URL neone可以簡單地使用到deocode令牌,你能告訴我怎樣才能避免這種 – Sankalp

1

在URL中,令牌是URL encoded。這是必要的,因爲有些字符在URL中有特殊含義。

通過網址編碼值,這些特殊字符被替換爲%nn代碼,其中nn是特殊字符的字符代碼。

Java會自動爲您解碼,以便在調用request.getParameter("token")而不是URL編碼值時獲得實際值。

+0

事實上%NN表示一個字節,而且它依賴於網絡服務器配置,這是byte-char-mapping使用的。 Tomcat通過示例在Tomcat中使用了ISO-8859-1,但我不知道它是否發生了變化。所以在編碼該值並使用相同編碼時必須小心。 – helios

+0

然後,這是一個很大的安全威脅,因爲URL可以簡單地用來解密令牌,你能告訴我如何避免這種情況 – Sankalp