2016-06-01 7 views
2

Ich habe eine Zeichenfolge, wo eine FTP-URL definiert ist, und ich möchte den Benutzernamen und das Passwort aus dieser Zeichenfolge analysieren. Dafür verwende ich die GetUserInfo Methode von java.net.URI (https://docs.oracle.com/javase/6/docs/api/java/net/URI.html) ...Umgang mit URLs mit '@' für java.net.URI 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) 
    }  
} 

Dieser Code funktioniert gut, außer wenn die URL hat ein '@' in es so ..

ftp://[email protected]:[email protected]/orders.txt 

Bei einer URL wie dieser gibt ein Aufruf von uri.getUserInfo() null zurück.

Gibt es eine Möglichkeit, solche URLs zu behandeln?

Antwort

1

Ein @ ist kein gültiges Zeichen in einem Benutzernamen oder Passwort in einer URL. Es muss verschlüsselt werden. So Ihr Code funktioniert, wenn Sie den URI wie folgt schreiben:

ftp://kirk%40starfleetcom:[email protected]/orders.txt

afaik, sollten Sie einfach URL-kodieren beide Benutzernamen und Passwort, bevor Sie den URI konstruieren:

java.net.URLEncoder.encode(username)