Ett @ i ett Java-proxylösenord
Skicka det råa lösenordet till PasswordAuthentication och använd URL-kodning bara när du bygger en faktisk proxy-URL.
java.net.PasswordAuthentication tar emot ett användarnamn och en teckenarray för lösenordet. Skicka de ursprungliga lösenordstecknen:
var credential = new java.net.PasswordAuthentication(
"proxy-user", "p@ssword".toCharArray());
Värdet är ett illustrativt lösenord. Hämta de riktiga tecknen från den avsedda källan för inloggningsuppgifter i applikationskoden.
Ett @ inuti detta lösenord är data, eftersom lösenordet redan har sitt eget argument. Att konvertera det till p%40ssword före konstruktorn ger ett annat lösenord.
En proxy-URL har en annan representation av inloggningsuppgifter. I en URL som http://proxy-user:p%[email protected]:8080 tillhör det kodade @ användarinformationen, medan det senare @ skiljer den informationen från värden. Avkoda och koda enligt det gränssnitt som faktiskt konsumerar värdet.
Shell-citering, escapning av Java-stränglitteraler och procentkodning av URL:er löser också olika tolkningsproblem. Avgör vilket lager som läser indata i stället för att koda inloggningsuppgifterna upprepade gånger tills en begärans beteende ändras.