2013-07-17 78 views
0

在我的web應用程序中,我正在重定向到外部URL,該URL包含一些憑據作爲URL字符串的一部分。我想在重定向之前單獨對憑證部分進行編碼。我有以下網址:Java URL編碼

String url1 = "http://servername:7778/reports/rwservlet?server=server1&ORACLE_SHUTDOWN=YES&PARAMFORM=no&report=test.rdf&desformat=pdf&desname=test.pdf&destype=cache&param1=56738&faces-redirect=true&"; 

我其編碼爲:

String URL = "userid=username/[email protected]"; 
encodedURL = URLEncoder.encode(URL, "UTF-8"); 
String redirectURL = url1 + encodedURL1; 

這段代碼生成的URL是

http://servername:7778/reports/rwservlet?server=server1&ORACLE_SHUTDOWN=YES&PARAMFORM=no&report=test.rdf&desformat=pdf&desname=test.pdf&destype=cache&param1=56738&faces-redirect=true&userid=%3Dusername%2Fpasswd%40DBname 

我們可以對編碼的結尾看到URL,只有像/這樣的特殊字符被編碼。即userid=username/[email protected]已成爲userid=%3Dusername%2Fpasswd%40DBname

我想要生成一個URL,其中將編碼整個字符串「username/passwd @ DBname」。例如:

userid=%61%62 

我該如何做到這一點?

+0

這沒有任何意義。你是否意識到,如果沒有一個願望最終用戶的努力,這仍然是可解碼的?你確定你沒有把編碼和加密搞混? – BalusC

+0

我只是想不直接顯示網址。我知道這可能會有潛在的安全漏洞,但我的應用程序需要這樣做。我認爲它可以被解碼。謝謝您的幫助。 – user1722908

回答

1

所以實際上你希望URL變得有些不可讀,不需要解碼,Base64編碼需要解碼(替換/-)。

是的,你可能會濫用URL編碼。

String encodeURL(String s) { 
    byte[] bytes = s.getBytes("UTF-8"); 
    StringBuilder sb = new StringBuilder(); 
    for (byte b : bytes) { 
     String hex = String.format("%%%02X", ((int)b) & 0xFF); 
     sb.append(hex); 
    } 
    return sb.toString(); 
} 

%%是百分號本身,和%02X十六進制,2個位數,零填充,首都。

請注意,某些瀏覽器會在鼠標懸停時顯示解碼的鏈接。但你只是重定向。

+0

感謝您的幫助。這種方法工作得很好! – user1722908