0

从我的 Web 应用程序中,我正在重定向到一个外部 URL,该 URL 具有一些凭据作为 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/passwd@DBname";
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/passwd@DBname成为userid=%3Dusername%2Fpasswd%40DBname

我想生成一个 URL,它将对整个字符串 "username/passwd@DBname" 进行编码。就像是 :

userid=%61%62

我怎样才能做到这一点?

4

1 回答 1

1

所以实际上你希望 url 变得有点不可读,而不需要解码,Base64 编码需要解码(替换/and -)。

是的,您可能会滥用 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 位数字,零填充,大写。

请注意,某些浏览器会在鼠标悬停时显示此类已解码的链接。但你只是重定向。

于 2013-07-17T21:09:27.447 回答