处理具有' @'的网址for java.net.URI getUserInfo

时间:2016-06-01 18:34:21

标签: java groovy uri

我有一个字符串,其中定义了FTP URL,我想解析该字符串中的用户名和密码详细信息。为此,我使用java.net.URI(https://docs.oracle.com/javase/6/docs/api/java/net/URI.html)的getUserInfo方法...

 def userInfo = uri.getUserInfo()
 def username
 def password

   if(userInfo){
      def pos = userInfo.indexOf(":")
      if(pos >= 0){
          username = userInfo.substring(0, pos)
          password = userInfo.substring(pos+1)
   }    
 }   

此代码可以正常工作,除非该网址具有' @'在这样的.. ..

 ftp://kirk@starfleet.com:spock123@enterprise.com/orders.txt

对于这样的URL,对uri.getUserInfo()的调用将返回null。

有没有办法处理这些网址?

1 个答案:

答案 0 :(得分:1)

@不是网址中用户名或密码中的有效字符。它必须编码。因此,如果您编写如下所示的URI,您的代码将会起作用:

ftp://kirk%40starfleetcom:spock123@enterprisecom/orders.txt

afaik,你应该在构造URI之前简单地对用户名和密码进行url编码:

java.net.URLEncoder.encode(username)