Java URL编码
在我的web应用程序中,我正在重定向到一个外部URL,该URL包含一些凭据作为URL字符串的一部分。我想在重定向之前单独对凭证部分进行编码。我有以下网址:Java URL编码,java,url,encoding,Java,Url,Encoding,在我的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&a
String url1 = "http://servername:7778/reports/rwservlet?server=server1&ORACLE_SHUTDOWN=YES&PARAMFORM=no&report=test.rdf&desformat=pdf&desname=test.pdf&destype=cache¶m1=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¶m1=56738&faces-redirect=true&userid=%3Dusername%2Fpasswd%40DBname
正如我们在编码URL的末尾所看到的,只有像/这样的特殊字符被编码。i、 e.userid=用户名/passwd@DBname
已成为userid=%3Dusername%2Fpasswd%40DBname
我想生成一个URL,其中包含整个字符串“username”/passwd@DBname“编码。比如:
userid=%61%62
如何实现这一点?因此,实际上您希望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位数字,零填充,大写
请注意,有些浏览器会在鼠标悬停时显示解码后的链接。但你只是在重定向。这毫无意义。您是否意识到,这仍然是可解码的,而无需一厢情愿的最终用户的任何努力?你确定没有混淆编码和加密吗?我只是不想直接显示URL。我知道这可能存在潜在的安全漏洞,但我的应用程序需要这样做。我同意它是可解码的。谢谢你的帮助。