2 votes

Gestion des URL qui ont un '@' pour java.net.URI getUserInfo

J'ai une chaîne de caractères dans laquelle une URL FTP est définie, et je veux analyser les détails du nom d'utilisateur et du mot de passe à partir de cette chaîne. Pour cela, j'utilise la méthode getUserInfo de java.net.URI ( https://docs.oracle.com/javase/6/docs/api/java/net/URI.html )...

 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)
   }    
 }   

Ce code fonctionne bien sauf si l'URL contient un '@' comme ceci

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

Pour une URL comme celle-ci, un appel à uri.getUserInfo() renvoie null.

Existe-t-il un moyen de gérer ces URL ?

1voto

Ralf Points 4270

A @ n'est pas un caractère valide dans un nom d'utilisateur ou un mot de passe dans une URL. Il doit être encodé. Donc votre code fonctionnera si vous écrivez l'URI comme ceci :

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

A priori, vous devriez simplement coder en url le nom d'utilisateur et le mot de passe avant de construire l'URI :

java.net.URLEncoder.encode(username)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X